MyBatis 基本应用

Mysql支持emoji 表情符号 升级编码为UTF8MB4 立即下载

快速入门

开发步骤

  1. 添加 MyBatis 相关依赖
  2. 创建数据库数据表
  3. 创建对应实体类
  4. 编写映射文件 Mapper.xml
  5. 编写核心配置文件 SqlMapConfig.xml
  6. 编写测试类以及相关测试方法

环境搭建

  1. 引入 MyBatis 以及其他相关依赖

    • 添加 Maven 编译信息

      <properties>
          <maven.compiler.encode>UTF-8</maven.compiler.encode>
          <maven.compiler.source>11</maven.compiler.source>
          <maven.compiler.target>11</maven.compiler.target>
      </properties>
      
    • 引入依赖

      <dependencies>
          <!-- 数据库驱动 -->
          <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
          <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>8.0.23</version>
          </dependency>
          <!-- Mybatis -->
          <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
          <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis</artifactId>
              <version>3.5.6</version>
          </dependency>
          <!-- JUnit -->
          <!-- https://mvnrepository.com/artifact/junit/junit -->
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.12</version>
          </dependency>
          <!-- Log4j2 -->
          <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
          <dependency>
              <groupId>org.apache.logging.log4j</groupId>
              <artifactId>log4j-core</artifactId>
              <version>2.14.1</version>
          </dependency>
      </dependencies>
      
    • 静态资源过滤

      <build>
          <resources>
              <resource>
                  <directory>src/main/java</directory>
                  <includes>
                      <include>**/*.xml</include>
                      <include>**/*.properties</include>
                  </includes>
                  <filtering>false</filtering>
              </resource>
              <resource>
                  <directory>src/main/resources</directory>
                  <includes>
                      <include>**/*.xml</include>
                      <include>**/*.properties</include>
                  </includes>
                  <filtering>false</filtering>
              </resource>
          </resources>
      </build>
      
  2. 创建数据库数据表 user

    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
        `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
        `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
        `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
        `password` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
        PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
    
    SET FOREIGN_KEY_CHECKS = 1;
    
  3. 创建对应实体类 User

    package cn.worstone.bean;
    
    public class User {
        private String id;
        private String name;
        private String username;
        private String password;
    
        public User() {
        }
    
        public User(String id, String name, String username, String password) {
            this.id = id;
            this.name = name;
            this.username = username;
            this.password = password;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        @Override
        public String toString() {
            return "User{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + '}';
        }
    }
    
  4. 编写映射文件 UserMapper.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="userMapper">
        <insert id="add" parameterType="User">
            INSERT INTO user (id, name, username, password) VALUES (#{id}, #{name}, #{username}, #{password})
        </insert>
        <update id="update" parameterType="User">
            UPDATE user SET name = #{name}, username = #{username}, password = #{password} WHERE id = #{id}
        </update>
        <delete id="delete" parameterType="String">
            DELETE FROM user WHERE id = #{id}
        </delete>
        <select id="selectOne" parameterType="User" resultType="User">
            SELECT id, name FROM user WHERE id = #{id}
        </select>
        <select id="selectList" parameterType="Map" resultType="User">
            SELECT id, name FROM user WHERE password = #{password} AND name LIKE #{name}"%"
        </select>
    </mapper>
    
  5. 编写核心配置文件 SqlMapConfig.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            <setting name="logImpl" value="LOG4J2"/>
        </settings>
        <typeAliases>
            <package name="cn.worstone.bean"/>
        </typeAliases>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&amp;characterEncoding=utf8&amp;nullCatalogMeansCurrent=true&amp;useSSL=false&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <!-- 使用 package 设置映射配置文件, namespace 不可以随意设置, 必须关联 Mapper 接口 -->
            <mapper resource="cn/worstone/mapper/UserMapper.xml"/>
        </mappers>
    </configuration>
    
  6. 编写测试类以及相关测试方法

    package cn.worstone.mapper;
    
    import cn.worstone.bean.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.UUID;
    
    public class UserMapperTest {
    
        private SqlSessionFactory sqlSessionFactory;
    
        // 在每个测试方法执行前执行的方法
        @Before
        public void before() throws IOException {
            InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
            this.sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }
    
        @Test
        public void addTradition() {
            SqlSession sqlSession = this.sqlSessionFactory.openSession();
            User user = new User();
            user.setId(UUID.randomUUID().toString().toUpperCase());
            user.setName("XXX");
            user.setUsername("first");
            user.setPassword("123456");
            // namespace + "." + SQL 语句 id
            sqlSession.insert("userMapper.add", user);
            sqlSession.commit();
            sqlSession.close();
        }
    
        @Test
        public void updateTradition() {
            SqlSession sqlSession = this.sqlSessionFactory.openSession();
            User user = new User();
            user.setId("9DAC0A44-B8B9-4615-A4B0-5559739F70E6");
            user.setName("沈幼楚");
            user.setUsername("first");
            user.setPassword("654321");
            sqlSession.update("userMapper.update", user);
            sqlSession.commit();
            sqlSession.close();
        }
    
        @Test
        public void deleteTradition() {
            SqlSession sqlSession = this.sqlSessionFactory.openSession(true);
            sqlSession.delete("userMapper.delete", "9DAC0A44-B8B9-4615-A4B0-5559739F70E6");
            sqlSession.close();
        }
    
        @Test
        public void selectOneTradition() {
            SqlSession sqlSession = this.sqlSessionFactory.openSession();
            User user = sqlSession.selectOne("userMapper.selectOne", "9846f655-6e08-422a-940e-a420efc84847");
            System.out.println(user);
            sqlSession.close();
        }
    
        @Test
        public void selectListTradition() {
            SqlSession sqlSession = this.sqlSessionFactory.openSession();
            Map<String, Object> conditions = new HashMap<>();
            conditions.put("name", "沈");
            conditions.put("password", "123456");
            List<User> users = sqlSession.selectList("userMapper.selectList", conditions);
            for (User user : users) {
                System.out.println(user);
            }
            sqlSession.close();
        }
    }
    

    MySQL 在 5.5.3 之后增加了 utf8mb4 字符编码,mb4 即 most bytes 4。简单说 utf8mb4 是 utf8 的超集并完全兼容 utf8,能够用四个字节存储更多的字符。

    但抛开数据库,标准的 UTF-8 字符集编码是可以用 1~4 个字节去编码 21 位字符,这几乎包含了世界上所有能看见的语言。然而在 MySQL 里实现的 utf8 最长使用 3 个字节,也就是只支持到了 Unicode 中的基本多文本平面(U 0000 至 U FFFF),包含了控制符、拉丁文、中、日、韩等绝大多数国际字符,但并不是所有,最常见的是现在手机端常用的表情字符 Emoji 和一些不常用的汉字,如 “墅” ,这些需要四个字节才能编码出来。

    当数据库中要求能够存入这些表情或宽字符时,可以把字段定义为 utf8mb4,同时要注意 连接字符集 也要设置为 utf8mb4,否则在 严格模式 下会出现 Incorrect string value: /xF0/xA1/x8B/xBE/xE5/xA2… for column 'name' 这样的错误,非严格模式下此后的数据会被截断。

    MyBatis 通过 package 标签设置映射配置文件时,映射配置文件中的 namespace 属性不可以随意设置,必须为 Mapper 接口的资源路径

    MyBatis 中的模糊查询可以通过两种方式实现:

    • SQL 语句 like 搭配 "%" 实现
    • SQL 语句 like 搭配传入参数 "...%" 实现

MyBatis 增删改查操作

  • 映射文件中使用 parameterType 指定参数的数据类型

  • 映射文件中使用 resultType 指定返回结果集的数据类型

  • 添加、删除、修改操作需要提交事务。可以设置 SqlSession 自动提交事务,也可以通过 SqlSession 的 commit() 方法手动提交事务

  • SQL 语句中,使用 #{} 或 ${} 方式引入变量,变量名称需要与实体类的属性名或者 Map 中设置的 key 一致

    MyBatis 中 ${} 方式是使用字符串拼接的方式拼接参数,容易造成 SQL 注入 的问题

MyBatis 映射文件概述

<?xml version="1.0" encoding="UTF-8"?>
<!-- 映射配置文件 DTD 文档类型定义 -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 根标签, 其中 namespace 属性为当前映射文件的标识. -->
<!-- namespace.id 构成每个 MappedStatement 唯一标识 statement -->
<mapper namespace="userMapper">
    <!-- id 属性设置当前 SQL 语句的标识 -->
    <!-- parameterType 属性设置传入参数类型 -->
    <!-- resultType 属性设置返回结果参数类型 -->
    <!-- 与 select 标签类似的还有 insert、 update、 delete, 分别对应数据库的相关操作 -->
    <select id="selectList" parameterType="Map" resultType="User">
        <!-- SQL 语句 -->
        SELECT id, name FROM user WHERE password = #{password} AND name LIKE #{name}"%"
    </select>
</mapper>

命名空间(namespace)的作用有两个,一个是利用更长的全限定名来将不同的语句隔离开来,同时也实现了接口绑定。长远来看,只要将命名空间置于合适的 Java 包命名空间之中,你的代码会变得更加整洁,也有利于你更方便地使用 MyBatis。为了减少输入量,MyBatis 对所有具有名称的配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则。

  • 全限定名(比如 “com.mypackage.MyMapper.selectAllThings”)将被直接用于查找及使用
  • 短名称(比如 “selectAllThings”)如果全局唯一也可以作为一个单独的引用。 如果不唯一,有两个或两个以上的相同名称(比如 “com.foo.selectAllThings” 和 “com.bar.selectAllThings”),那么使用时就会产生**“短名称不唯一”的错误,这种情况下就必须使用全限定名**

MyBatis 核心配置文件

MyBatis 的核心配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

  • configuration(配置)
    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境配置)
      • environment(环境变量)
      • transactionManager(事务管理器)
      • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器)

MyBatis 常用配置解析

environments 标签

MyBatis 可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

<environments default="development">
	<environment id="development">
    	<transactionManager type="JDBC">
      		<property name="..." value="..."/>
    	</transactionManager>
    	<dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
    	</dataSource>
  	</environment>
</environments>
  • 在 MyBatis 中有两种类型的事务管理器(transactionManager)

    • JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。

    • MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。例如:

      <transactionManager type="MANAGED">
        	<property name="closeConnection" value="false"/>
      </transactionManager>
      

    如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

  • dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。有三种内建的数据源类型

    • UNPOOLED – 这个数据源的实现会每次请求时打开和关闭连接。
    • POOLED – 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
    • JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。
mapper 标签
<mappers>
    <!-- 使用相对于类路径的资源引用 -->
  	<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
    <!-- 使用完全限定资源定位符(URL) -->
    <mapper url="file:///var/mappers/AuthorMapper.xml"/>
    <!-- 使用映射器接口实现类的完全限定类名 -->
    <mapper class="org.mybatis.builder.AuthorMapper"/>
    <!-- 将包内的映射器接口实现全部注册为映射器 -->
    <package name="org.mybatis.builder"/>
</mappers>

映射器类是 Java 类,它们包含 SQL 映射注解从而避免依赖 XML 文件。不过,由于 Java 注解的一些限制以及某些 MyBatis 映射的复杂性,要使用大多数高级映射(比如:嵌套联合映射),仍然需要使用 XML 配置。有鉴于此,如果存在一个同名 XML 配置文件,MyBatis 会自动查找并加载它。

MyBatis 相应 API

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。

String resource = "org/mybatis/builder/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);

这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是 方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但最好还是不要一直保留着它,以保证所有的 XML 解析资源可以被释放给更重要的事情。

SqlSessionFactory

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码**“坏习惯”。因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式**。

SqlSession openSession()
SqlSession openSession(boolean autoCommit)
SqlSession

SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。

每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中,比如 Servlet 框架中的 HttpSession。 如果你现在正在使用一种 Web 框架,考虑将 SqlSession 放在一个和 HTTP 请求相似的作用域中。 换句话说,每次收到 HTTP 请求,就可以打开一个 SqlSession,返回一个响应后,就关闭它。 这个关闭操作很重要,为了确保每次都能执行关闭操作,你应该把这个关闭操作放到 finally 块中。下面的示例就是一个确保 SqlSession 关闭的标准模式:

try (SqlSession session = sqlSessionFactory.openSession()) {
	// 你的应用逻辑代码
}

在所有代码中都遵循这种使用模式,可以保证所有数据库资源都能被正确地关闭。

数据库相关操作的方法:

<T> T selectOne(String statement, Object parameter)
<E> List<E> selectList(String statement, Object parameter)
int insert(String statement, Object parameter)
int update(String statement, Object parameter)
int delete(String statement, Object parameter)

事务相关操作的方法:

void commit()
void rollback()

MyBatis Dao 层实现

传统开发方式

编写接口 UserDao

package cn.worstone.dao;

import cn.worstone.bean.User;

import java.util.List;

public interface UserDao {
    List<User> selectList();
}

编写接口实现类 UserDaoImpl

package cn.worstone.dao.impl;

import cn.worstone.bean.User;
import cn.worstone.dao.UserDao;
import cn.worstone.utils.SessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class UserDaoImpl implements UserDao {

    @Override
    public List<User> selectList() {
        // 单例模式
        SqlSessionFactory sqlSessionFactory = SessionFactoryUtils.getSqlSessionFactory();
        List<User> users = null;
        try (SqlSession session = sqlSessionFactory.openSession()) {
            users = session.selectList("userMapper.selectList");
        }
        return users;
    }
}

测试方法

@Test
public void selectList() {
    UserDao userDao = new UserDaoImpl();
    List<User> users = userDao.selectList();
    for (User user : users) {
        System.out.println(user);
    }
}
代理开发方式

代理开发方式只需要编写 Mapper 接口(相当于 Dao 接口),由 Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法同 Dao 接口实现类方法类似。 Mapper 接口开发需要遵循以下规范:

  1. Mapper.xml 文件中的 namespace 与 Mapper 接口的全限定名相同
  2. Mapper 接口方法名和 Mapper.xml 中定义的每个 SQL 语句 的 id 相同
  3. Mapper 接口方法的输入参数类型和 Mapper.xml 中定义的每个 SQL 语句 的 parameterType 的类型相同
  4. Mapper 接口方法的输出参数类型和 Mapper.xml 中定义的每个 SQL 语句 的 resultType 的类型相同

映射配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.worstone.mapper.UserMapper">
    <select id="selectList" resultType="User">
        SELECT id, name FROM user
    </select>
</mapper>

编写 Mapper 接口 UserMapper

package cn.worstone.mapper;

import cn.worstone.bean.User;

import java.util.List;
// 接口的资源路径
public interface UserMapper {
    List<User> selectList();
}

测试方法

@Test
public void selectListProxy() {
    try (SqlSession session = sqlSessionFactory.openSession()) {
        UserMapper userMapper = session.getMapper(UserMapper.class);
        List<User> users = userMapper.selectList();
        for (User user : users) {
            System.out.println(user);
        }
    }
}
ORACLE数据库字符集设置 字符集的设置不当是影响ORACLE数据库汉字显示的关键问题 立即下载

相关推荐

jsq+mybatis+mysql中文乱码解决方案

jsq+mybatis+mysql中文乱码的详细方案。

【mybatis---2增删改查】

第一章:代理Dao方式的CRUD操作 代理Dao方式的增删改查 创建项目 UserDao接口代码 `import com.qcby.entity.User; import java.util.List; public interface UserDao { /** * 全部查询 * @return */ public List findAll(); /** * 根据id进行查询 * @param id */ public User findById(int id); /** * 插入数据

edwer93的博客 305

Mybatis特殊字符处理的详解

主要介绍了Mybatis特殊字符处理的详解的相关资料,需要的朋友可以参考下

001,Mybatis入门

Mybatis入门 1,什么是Mybatis MyBatis 本来是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。(引用自百度百科) 读了

V哥教育,java技术博客 1188

双目相机测距原理

普通双目相机具有如下特点:左右两个相机位于同一平面(光轴平行),且相机参数(焦距f)一致。其原理图如下:如图所示,P点为相应的物体位置,CL和CR为左右相机光心位置,PL和PR分别为左相机和右相机拍摄的P点成像结果。f为相机焦距,Z为物体距相机的深度距离,b为左右相机基线距离根据几何关系有:则相应的深度信息计算公式为:(1)其中XL-XR为视差。其余在两侧的情况同样可以用几何关系分析得到该表达式(1),即对于普通双目相机测距可以直接通过公式(1)得到深度结果。

doudou2weiwei的博客 4548

Windows 10/11 安装 HYSPLIT 气象模型全攻略(附必备工具包下载清单)

本文提供了一份详尽的Windows 10/11系统下HYSPLIT气象模型安装与配置全攻略。指南涵盖了从核心认知、必备工具包(Tcl/Tk、ImageMagick)下载,到分步安装、环境变量设置及首次运行验证的完整流程,旨在帮助研究者和学生高效部署这一用于大气轨迹模拟与污染物扩散分析的专业工具。

weixin_28335283的博客 612

Mybatis

Mybaits官网:MyBatis中文网文档地址:D:\MybatisTest第一步:就按照Mybatis官网介绍,来测试大概的项目结构就这样,随便创建maven工程 引入的依赖 根据Mybatis文档介绍......先创建个数据库名 mybatisutf8和utfmb4区别:utfmb4 兼容 utf8 且可以显示更多的字符,一般都用不到,选择utfmb4,只会浪费空间,通常,用的utf8,我喜欢用utf8mb4(个人习惯);排序常用的就是 utf8_general_ciutf8_general_ci

tiantiantbtb的博客 1345

Docker部署Nextcloud私有云:MariaDB、OnlyOffice与HTTPS全栈实践

Nextcloud作为主流开源私有云平台,其稳定部署依赖Docker容器化、MariaDB数据库优化、OnlyOffice在线协作集成及HTTPS安全加固四大核心技术。理解Docker Compose服务健康检查机制与依赖等待原理,可避免因启动时序导致的500/404错误;掌握MariaDB字符集配置与InnoDB参数调优,是保障Nextcloud全文搜索与大文件上传可靠性的底层基础;而OnlyOffice的JWT兼容性控制与Nginx路径重写规则,则直接决定文档协同功能是否可用。在家庭NAS、边缘服务器或

weixin_30328063的博客 515

mybatis关联映射

关联映射 一、创建表结构 1.学生表 首先在数据库里建一个表。 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11) .

weixin_64881460的博客 661

【学习笔记】《基于φ-OTDR的分布式扰动传感系统定位算法研究-北交-通信与信息系统-吴》重点笔记

一、绪论 1.1 引言 光纤传感器的优点:跟电子传感器相比较,光纤传感器有诸多独特的优势:对电磁干扰免疫;具有很好的绝缘性和耐腐蚀性;灵敏度高,可测量微弱信息;可实现大范围监测和分布式传感,仅需一根传感光纤,更为经济便捷;传感光纤体积小、重量轻、可形变,适用于一些特殊应用场所;还有无需供电、耐高温、便于组网等等优点 光纤传感器的感知信号的方法:当探测光入射到光纤中时会发生散射并产生各种散射光...

qq_36045093的博客 2万+

深入解析Matlab phantom函数:从基础模体到自定义头部仿真

本文深入解析了Matlab中的phantom函数,它是医学图像处理算法测试的核心工具。文章详细介绍了如何使用内置的Shepp-Logan及其改良版头部仿真模体,并重点讲解了通过自定义参数矩阵来构建专属模体的方法。通过从生成模体到模拟投影(正弦图)再到图像重建的完整实战流程,展示了phantom函数在CT等算法开发与验证中的关键作用。

m3n5b7v8c9x的博客 951

Springboot整合mybatis日记

整合mybatis mybatis是一个半自动的ORM框架 请先安装好 数据库,再去玩持久层的框架 ORM介绍:对象关系映射(Object Relational Mapping,简称ORM),目的是想像操作对象一样操作数据库.因为数据库不是面向对象的,所以需要编程进行映射,像这种持久层框架还有以前很火的hibernate,是一个全自动的ORM框架,mybatis半自动,是首选的持久层框架 这里我创建了一个新的连接,跟数据库,记得把mysql服务打开下!我这里还用到了一个 可视化工具,没有的呢,我这里有一个好

Adger 516

SAP-ABAP:SAP Open SQL 分页技术深度解析:语法、性能陷阱与最佳实践

SAP Open SQL 分页技术深度解析:语法、性能陷阱与最佳实践

baidu_35680696的博客 637

MyBatis的基本应用

MyBatis的基本应用、MyBatis缓存、MyBatis插件、MyBatis注解开发

摸魚散人的博客 1362

R语言Dunnett’s检验实战:寻找差异组之间的效果

总结起来,本文以R语言为工具,演示了如何使用Dunnett’s检验来找出单因素方差分析中不同组之间的效果差异。在本篇文章中,我们将通过R语言实战演示如何使用Dunnett’s检验来寻找不同组之间的效果差异。在分析结果时,通常我们会关注具有显著差异的组别,并基于Dunnett’s检验结果进行进一步的解释和讨论。首先,我们需要准备一组数据,假设我们有一个实验,涉及到四个不同的处理组和一个对照组。当我们发现方差分析结果显示存在显著差异时,我们可以进一步进行Dunnett’s检验来确定具体哪些组之间存在差异。

CoderExtra的博客 1104

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

总结WRF运行时报错及解决方案(持续更新)

WW、forever的博客 1634

MyBatis基本应用

MyBatis基本应用 框架简介 三层架构 软件开发常用的架构是三层架构,之所以流行是因为有着清晰的任务划分。一般包括以下三层: 持久层:主要完成与数据库相关的操作,即对数据库的增删改查。 因为数据库访问的对象一般称为Data Access Object(简称DAO),所以有人把持久层叫做DAO层。 业务层:主要根据功能需求完成业务逻辑的定义和实现。 因为它主要是为上层提供服务的,所以有人把业务层叫做Service层或Business层。 表现层:主要完成与最终软件使用用户的交互,需要有交互界面(UI)。

weixin_49741990的博客 141

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Mybatis基本应用

Mybatis 1.CRUD 1、namespace namespace中的包名要和Dao/mapper接口的包名一样 2、select 选择,查询语句 id:就是对应的namespace中的方法名; resultType:Sql语句执行的返回值 parameterType:参数类型 1.编写接口 //根据ID查询用户 User getUserById(int id); 2.编写对应的mapper中的sql语句 <select id="getUserById" parame

qq_45846647的博客 304

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Mybatis的基本应用

一篇带你读懂Mybatis(Mybatis最详细的攻略)

2301_82006865的博客 1873

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Mybatis:2 Mybatis基本应用

Mybatis:2 Mybatis基本应用 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录Mybatis:2 Mybatis基本应用一、快速入门1.开发步骤二、Mybatis的Dao层实现1.引入库1.1 环境搭建2.读入数据总结 一、快速入门 1.开发步骤 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

weixin_46003987的博客 592

06_01_Mybatis 基本应用

Mybatis 任务一:基本应用 课程任务主要内容: 框架介绍 Mybatis: ORM 快速入门 映射文件简单概述 实现CRUD 核心配置文件介绍 api介绍 mybatis的dao层开发使用(接口代理方式) SSM = springmvc + spring + mybatis 一 框架简介 1.1 三层架构 软件开发常用的架构是三层架构,之所以流行是因为有着清晰的任务划分。一般包括以下三层: 持久层:主要完成与数据库相关的操作,即对数据库的增删改查。 因为数据库访问的对象一般称为Data Acce

weixin_41596178的博客 181

mybatis框架——基本应用

打个广告,帮朋友卖点东西,东西超便宜的哟【衣服鞋子等】,厂家直接出货,绝对低于市场价!!!一般都比市场价便宜3—7折【都是牌子货】,如果您感兴趣,可以扫描屏幕下方的二维码,感谢关注!!! 微信 一、基本介绍 1、介绍 mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架,但是具体的说,hibernate是一个完全的orm框架,而myba...

随笔记 1651

1.mybatis的基本应用

1.mybatis的基本应用 一、建立数据的数据模型 1.1建立表的结构如图: 1.2手动填入测试的数据 目前为止,数据库的数据模型建立就算完成了。 二、建立好测试web项目,写好javabean,并配置相应xml文件 2.1根据数据数据类型建好JavaBean 2.2下图为项目的目录结构,和需要的包; 2.3将mybatis官网下...

disheng1504的博客 121
下一篇: MyBatis 相关概念
LiveForCode
博客等级 码龄5年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值