前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBatis之Hello world(Mybatis入门)

MyBatis之Hello world(Mybatis入门)

作者头像
别先生
发布2018-01-02 11:37:00
8930
发布2018-01-02 11:37:00
举报
文章被收录于专栏:别先生

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:创建数据库和数据表,省略,创建实体类

代码语言:javascript
复制
 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的工具类:

代码语言:javascript
复制
 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     //定义私有静态sqlSessionFactory
22     private static SqlSessionFactory sqlSessionFactory;
23     
24     //静态块,使用该类时,自动加载该静态块
25     //加载位于src目录下面的mybatis.cfg.xml配置文件
26     static{
27         try {
28             //读取配置文件mybatis.cfg.xml
29             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     //获取SqlSession
41     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

代码语言:javascript
复制
 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

代码语言:javascript
复制
 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进行测试

代码语言:javascript
复制
  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 ~ ~ ~ ~ ~ ~ ~ ~ ~!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档