MyBatis之Hello world(Mybatis入门)

来源:互联网 发布:传奇支付平台源码 编辑:程序博客网 时间:2024/05/21 18:31
MyBatis中文网,超详细的:http://www.mybatis.org/mybatis-3/zh/index.html

MyBatis英文网http://www.mybatis.org/mybatis-3/

MyBatis的Github:https://github.com/mybatis/mybatis-3

1:创建一个动态web工程
2:导入MyBatils必须的包
    MyBatis的使用说明:
    asm-3.3.1.jar 【字节码的包】
    cglib-2.2.2.jar  【代理包】
    commons-logging-1.1.1.jar  【日志包】
    log4j-1.2.16.jar
    mybatis-3.1.1.jar   【mybatis的核心包】
    mysql-connector-java-5.1.40-bin.jar  【mysql的驱动包】
3:创建数据库和数据表,省略,创建实体类

 1 package com.bie.mybatis01; 2 /**  3 * @author BieHongLi  4 * @version 创建时间:2017年4月11日 下午2:47:03  5 *  6 */ 7 public class User { 8  9     private Integer id;//用户编号10     private String name;//用户姓名11     private int sal;//用户薪资12     13     public Integer getId() {14         System.out.println("测试配置文件,确实是调用了user.getId");15         return id;16     }17     public void setId(Integer id) {18         this.id = id;19     }20     public String getName() {21         System.out.println("测试配置文件,确实是调用了user.getName");22         return name;23     }24     public void setName(String name) {25         this.name = name;26     }27     public int getSal() {28         System.out.println("测试配置文件,确实是调用了user.getSal");29         return sal;30     }31     public void setSal(int sal) {32         this.sal = sal;33     }34     public User(Integer id, String name, int sal) {35         super();36         this.id = id;37         this.name = name;38         this.sal = sal;39     }40     41     42     43     44 }

4:创建MyBatis的工具类:

 1 package com.bie.utils; 2  3 import java.io.IOException; 4 import java.io.Reader; 5 import java.sql.Connection; 6  7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory;10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;11 12 /** 13 * @author BieHongLi 14 * @version 创建时间:2017年4月11日 下午3:01:22 15 * 工具类16 */17 public class MyBatisUtils {18 19     //定义私有静态当前线程泛型(SqlSession)对象20     private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();21     //定义私有静态sqlSessionFactory22     private static SqlSessionFactory sqlSessionFactory;23     24     //静态块,使用该类时,自动加载该静态块25     //加载位于src目录下面的mybatis.cfg.xml配置文件26     static{27         try {28             //读取配置文件mybatis.cfg.xml29             Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");30             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 31         } catch (IOException e) {32             e.printStackTrace();33             throw new RuntimeException(e);34         }35     }36     37     //禁止外界通过new方法创建38     private MyBatisUtils(){}39     40     //获取SqlSession41     public static SqlSession getSqlSession(){42         //从当前线程中获取SqlSession对象43         SqlSession sqlSession = threadLocal.get();44         //如果SqlSession对象为空45         if(sqlSession == null){46             //在SqlSessionFactory非空的情况下,获取SqlSession对象47             sqlSession = sqlSessionFactory.openSession();48             //将sqlSession对象与当前线程绑定在一起49             threadLocal.set(sqlSession);50         }51         //返回sqlSession对象52         return sqlSession;53     }54     55     //关闭SqlSession与当前线程分开56     public static void closeSqlSession(){57         //从当前线程中获取SqlSession对象58         SqlSession sqlSession = threadLocal.get();59         //如果SqlSession对象非空60         if(sqlSession != null){61             //关闭SqlSession对象62             sqlSession.close();63             //分开当前线程与SqlSession对象的关系,目的是让GC尽早回收64             threadLocal.remove();65         }66     }67     68     69     /*public static void main(String[] args) {70         SqlSession sqlSession = MyBatisUtils.getSqlSession();71         Connection con = sqlSession.getConnection();72         if(con!=null){73             System.out.println("连接成功");74         }else{75             System.out.println("连接失败");76         }77         78         System.out.println(con!=null?"connection is ok":"connection is fail");79     }*/80     81 }

 5:创建映射文件,放到其包中即可,如UserMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4  5 <!-- MyBatis的映射配置文件  6     namespace:名称空间,必须唯一 7 --> 8 <!-- <mapper namespace="userNamespace"> --> 9 <mapper namespace="com.bie.mybatis01.User">10 11     <!-- 12         resultMap标签:映射实体与表13             type属性:表示实体全路径名14             id属性:为实体与表的映射取一个任意名称且唯一的名字15      -->16     <resultMap type="com.bie.mybatis01.User" id="userMap">17         <!-- id标签映射主键 18             property属性:实体的属性名19             column属性:表的字段名20         -->21         <id column="id" property="id"/>22         23         <!-- result标签非主键属性 -->24         <result column="name" property="name"/>25         <result column="sal" property="sal"/>26         27     </resultMap>28     29     <!-- 30         insert标签:要书写insert这么一个sql语句31             id属性:为insert这么一个sql语句取一个任意唯一的名字32      -->33     <insert id="insertId" parameterType="com.bie.mybatis01.User">34         insert into user values(2,"张三",1234)35     </insert>36     37     <insert id="insertId2" parameterType="com.bie.mybatis01.User">38         <!-- 39             可以这样理解,参数的设置,其实#{id} 就等价于#{user.getId()}40             insert into user values(#{user.getId()},#{user.getName()},#{user.getSal()});41         42          -->43          insert into user values(#{id},#{name},#{sal})44     </insert>45     46 </mapper>

6:创建配置文件,放到src目录下面,如mybatils.cfg.xml

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 4  5 <!-- 1:连接数据库的配置 --> 6 <configuration> 7      8     <!-- 设置一个默认的连接环境信息 --> 9     <environments default="jdbc_developer">10         11         <!-- 连接环境信息,取一个任意唯一的名字 -->12         <environment id="jdbc_developer">13         14             <!-- 2:MyBatis使用jdbc事务事务管理方式 -->15             <transactionManager type="jdbc"></transactionManager>16             17             <!-- 3:MyBatis使用连接池方式来获取连接 -->18             <dataSource type="pooled">19             20                 <!-- 4:配置与数据库交互的4哥必要属性 -->21                 <property name="driver" value="com.mysql.jdbc.Driver"/>22                 <property name="url" value="jdbc:mysql:///test"/>23                 <property name="username" value="root"/>24                 <property name="password" value="123456"/>25                 26             </dataSource>27             28         </environment>29     30     </environments>31 32     33     <!-- 加载映射文件 -->34     <mappers>35         <mapper resource="com/bie/mybatis01/UserMapper.xml"/>36     </mappers>37     38 </configuration>

7:开始写测试类UserDao进行测试

  1 package com.bie.mybatis01;  2   3 import org.apache.ibatis.session.SqlSession;  4   5 import com.bie.utils.MyBatisUtil;  6 import com.bie.utils.MyBatisUtils;  7   8 /**   9 * @author BieHongLi  10 * @version 创建时间:2017年4月11日 下午3:03:54  11 * dao层持久层:数据交互层 12 */ 13 public class UserDao { 14  15     /*** 16      * 用户添加的方法 17      * @param user 18      */ 19     public void insert(){ 20         SqlSession sqlSession = null; 21         try { 22             //sqlSession = MyBatisUtils.getSqlSession(); 23             sqlSession = MyBatisUtil.getSqlSession(); 24             //事务开始(默认) 25             //读取UserMapper.xml映射文件中的SQL语句 26             int i = sqlSession.insert("userNamespace.insertId"); 27             System.out.println("本次操作影响了" + i + "行"); 28              29             //事务提交 30             sqlSession.commit(); 31         } catch (Exception e) { 32             e.printStackTrace(); 33             //事务回滚 34             sqlSession.rollback(); 35         }finally { 36             MyBatisUtils.closeSqlSession(); 37         } 38          39     } 40      41     /*** 42      * 插入带参的方法 43      * @param user 44      */ 45     public void insert2(User user){ 46         SqlSession sqlSession = null; 47         try { 48             //第一首先链接数据库 49             sqlSession = MyBatisUtils.getSqlSession(); 50             //默认打开事务 51             //读取UserMapper.xml映射文件的SQL语句 52             //第一个参数,命名空间.sql的id,d第二个参数是方法的参数user 53             sqlSession.insert("userNamespace.insertId2", user); 54              55             //提交事务 56             sqlSession.commit(); 57         } catch (Exception e) { 58             e.printStackTrace(); 59             //回滚事务 60             sqlSession.rollback(); 61         }finally { 62             //关闭SqlSession 63             MyBatisUtils.closeSqlSession(); 64         } 65          66     } 67      68     public void insert3(User user){ 69         SqlSession sqlSession = null; 70         try { 71             //第一首先链接数据库 72             sqlSession = MyBatisUtils.getSqlSession(); 73             //默认打开事务 74             //读取UserMapper.xml映射文件的SQL语句 75             //第一个参数,命名空间.sql的id,d第二个参数是方法的参数user 76             sqlSession.insert("com.bie.mybatis01.User.insertId2", user); 77              78             //提交事务 79             sqlSession.commit(); 80         } catch (Exception e) { 81             e.printStackTrace(); 82             //回滚事务 83             sqlSession.rollback(); 84         }finally { 85             //关闭SqlSession 86             MyBatisUtils.closeSqlSession(); 87         } 88          89     } 90      91     public static void main(String[] args) { 92         UserDao dao = new UserDao(); 93         //dao.insert(); 94         //dao.insert2(new User(3,"张三",1234)); 95         dao.insert3(new User(4,"张三",1234)); 96          97      98     } 99 100 101     102 }

8:MyBatis的工作流
    (a)通过Reader对象读取src目录下面的mybatis.xml配置文件(该配置文件的名称和未知可以任意)
        Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
    (b)通过SqlSessionFactoryBuilder对象创建 SqlSessionFactory对象
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    (c)从当前线程中获取SqlSession对象
        SqlSession sqlSession = threadLocal.get();
    (d)事务开始,在mybatis中默认
    (e)通过SqlSession对象读取UserMapper.xml映射文件中的操作编号,从而读取sql语句
        int i = sqlSession.insert("userNamespace.insertId");
    (f)事务提交,必写
        sqlSession.commit();
        【注意:不要忘记事务回滚】
    (g)关闭SqlSession对象,并且分开当前线程与SqlSession对象,让GC尽早回收
        MyBatisUtils.closeSqlSession();   

时间一分一秒的溜走,让自己做更有意义的事情,奋斗吧,小怪兽~~~

Time passes by, let yourself do more meaningful things, fight it, little monster ~ ~ ~ ~ ~ ~ ~ ~ ~!

0 0
原创粉丝点击