zoukankan      html  css  js  c++  java
  • (一)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;
        }
    }

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

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

  • 相关阅读:
    链堆栈的实现
    关于HyperLink的NavigateUrl属性的链接地址参数设置
    //yield return用于无缝实现迭代模式。
    NUnit的使用
    非常不错的数据访问架构
    Dictionary应用
    针对数据分析没态度的几句牢骚
    微软算法面试题(4)
    程序员面试题精选100题(60)判断二叉树是不是平衡的
    C++设计模式单件
  • 原文地址:https://www.cnblogs.com/zuzZ/p/8086612.html
Copyright © 2011-2022 走看看