mybatis储备知识

Posted Together~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis储备知识相关的知识,希望对你有一定的参考价值。

 mybatis(基础及其搭建)

声明:该文章及该分类中的内容均基于正在开发的项目和一本参考书(深入浅出MyBatis技术原理与实战    by 杨开振)

一、mybatis核心组件(简要介绍)

        SqlSessionFactoryBuilder(构造器):根据配置信息或代码生成SqlSessionFactory(工厂接口);

        SqlSessionFactory:依靠工厂生成SqlSession(会话);

        SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口;主要用途:1.获取映射器,2.直接通过命名信息执行SQL;

        SQLMapper:由一个Java接口和XML文件(或注解)构成,需给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。

  

二、构建SqlSessionFactory(开始搭建)

        有两种构建方式:1.xml配置;2.代码方式

        建议使用XML方式:避免重复编译代码,也方便配置人员修改

简易XML配置:(部分可不配置,按需要进行配置)

  mybatis-config.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration><!-- org.apache.ibatis.session.Configuration -->
 6     <!-- 属性 -->
 7     <properties resource="jdbc.properties"/>
 8      <settings/> <!--设置 -->
 9     <!-- 类型命名  定义别名-->
10     <typeAliases>
11         <typeAlias alias="role" type="com.standard.model.Role"/>
12     </typeAliases>
13      <typeHandlers/><!--类型处理器 -->
14     <objectFactory/><!-- 对象工厂 -->
15      <plugins/><!--插件 -->
16     <environments default="development"><!-- 配置环境 -->
17         <environment id="development"><!-- 环境变量 -->
18             <transactionManager type="JDBC"><!--采用JDBC 事务管理器 -->
19                 <property name="autoCommit" value="false"/>
20             </transactionManager>
21             <!-- 数据源 -->
22             <dataSource type="POOLED">
23                 <property name="driver" value="${driver}"/>
24                 <property name="url" value="${url}"/>
25                 <property name="username" value="${username}"/>
26                 <property name="password" value="${password}"/>
27             </dataSource>
28         </environment>
29     </environments>
30      <databaseIdProvider/><!--数据库厂商标识 -->
31     <mappers><!-- 映射器 -->
32         <mapper resource="com/standard/dao/UserMapper.xml"/>
33     </mappers>
34 </configuration>

注意:

<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">

  下面配置映射器时,这个地方有区别

  database在jdbc.properties中读取:

1 driver=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/mybatis
3 username=root
4 password=root

        注:mybatis的解析程序会将mybatis-config.xml文件配置的信息解析到Configuration类对象里面,然后利用SqlSessionFactoryBuilder读取这个对象为我们创建SqlSessionFactory。

三、创建SqlSession

        以下是封装好的工具类,打个util类直接使用

 1 public class SqlSessionFactoryUtil {
 2     
 3     //类线程锁
 4     private static final Class CLASS_LOCK =SqlSessionFactoryUtil.class;
 5     //私有化构造参数
 6     //防止使用者使用new的方式创建多个对象
 7     private SqlSessionFactoryUtil(){    }
 8 
 9     //构建SqlSessionFactory   实现单例
10     static SqlSessionFactory sqlSessionFactory=null;
11     
12     public static SqlSessionFactory initSqlSessionFactory(){
13         InputStream iStream = null;
14         //sqlSessionFactory对象
15         SqlSession sqlSession=null;
16         
17         //读入配置流文件  加载核心配置文件
18         
19         try{
20             iStream=Resources.getResourceAsStream("mybatis-config.xml");
21         }catch(IOException e){
22             // TODO Auto-generated catch block
23             System.out.println("--"+e);
24             e.printStackTrace();
25         }
26 
27         synchronized (CLASS_LOCK) {//避免在多线程环境中,多次初始化造成对象的不唯一
28             if(sqlSessionFactory==null){
29                 //获取SQLSessionFactory
30                 sqlSessionFactory=new SqlSessionFactoryBuilder().build(iStream);
31             }
32 
33         }
34         return sqlSessionFactory;
35     }
36     
37     //打开SqlSession
38     public static SqlSession openSqlSession(){
39         if(sqlSessionFactory==null){
40             initSqlSessionFactory();
41         }
42         return sqlSessionFactory.openSession();
43     }
44 }

四、映射器(接口+XML注解)

        实现方式有两种:1.通过XML文件方式实现(推荐使用)

           2.通过代码方式实现:在Configuration里面注册Mapper接口(需要写入Java注解),较为复杂。

  先给出接口:UserMapper.java(xml方式)

1 public interface UserMapper {
2     int insert(User record);
3     List<User> select(); 
4 }

  然后给出映射文件:UserMapper.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 <mapper namespace="com.standard.dao.UserMapper">
 4      
 5    <resultMap id="BaseResultMap" type="com.standard.model.User">
 6      <id column="ID" jdbcType="INTEGER" property="id" />
 7      <result column="ACCOUNT" jdbcType="VARCHAR" property="account" />
 8      <result column="NAME" jdbcType="VARCHAR" property="name" />
 9      <result column="PASSWORD" jdbcType="VARCHAR" property="password" />
10      <result column="ROLE_ID" jdbcType="INTEGER" property="roleId" /> 
11      
12   </resultMap>
13    <sql id="Base_Column_List">
14      ID, ACCOUNT, NAME, PASSWORD, ROLE_ID
15    </sql>
16      
17    <select id="select" resultMap="BaseResultMap">
18      select 
19      <include refid="Base_Column_List"/>
20      from STANDARD_USER
21    </select>
22    

注意:

 <?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">

  可以同上边提到的mybatis-config.xml配置比较此部分内容,对小白理解mybatis或许会有帮助

 

五、最后测试一下

  先展示一下POJO: User.java

public class User{
    private Integer id;
    
    private String account;
    
    private String name;
    
    private String password;
    
    private Integer roleId;
    
    private Role role;
    
    //get set 方法省略...

  然后写个测试类

public class UserTest {

    static SqlSession sqlSession=null;
    static UserMapper userMapper;
    public static void main(String[] args ) {
        try{
            sqlSession=SqlSessionFactoryUtil.openSqlSession();
            userMapper=sqlSession.getMapper(UserMapper.class);
            UserTest userTest=new UserTest();
            //插入
            int i =userTest.insert();
            System.out.println(i);
            sqlSession2.commit();
            
        }catch(Exception e){
            System.err.println("---"+e.getMessage());
            sqlSession.rollback();
        }finally{
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }
    public int insert(){
        User user=new User();
        user.setId(9);
        user.setName("小白");
        user.setAccount("admin");
        user.setPassword("123456");
        user.setRoleId(1);
        int i = userMapper.insert(user);
        return i;
    }
}

        最后就完成了一次插入数据库操作。

        小白刚刚起步,欢迎吐槽~~

以上是关于mybatis储备知识的主要内容,如果未能解决你的问题,请参考以下文章

爬虫知识储备篇---分析http请求

转载写一个js库需要怎样的知识储备和技术程度?

Mybatis学习第22节 -- 高级结果映射 构造方法映射

vue项目开发前的es6的知识储备

知识储备

储备知识与装饰器