peace唠叨

myBatis简单入门

本文主要介绍一个现在比较流行的数据库操作框架Mybatis,只是简单的介绍入门用法

全部代码下载:

Github链接:链接

写文章不易,欢迎大家采我的文章,以及给出有用的评论,当然大家也可以关注一下我的github;多谢;

1.MyBatis 是什么?

MyBatis 是一款一流的支持自定义 SQL、存储过程和高级映射的持久化框架。MyBatis 几乎消除了所有的 JDBC 代码,也基本不需要手工去设置参数和获取检索结果。MyBatis 能够使用简单的XML 格式或者注解进行来配置,能够映射基本数据元素、Map 接口和 POJOs(普通 java 对象)到数据库中的记录。

2.建立工程和导入jar包

  1. 建立java工程,当然也可以动态web工程

  2. 带入jar包:

主要两个包:mybatis-3.1.1.jar和mysql-connector-java-5.1.37-bin.jar

01

3.在mysql创建对应的表

建立一个数据库表:students

1
2
3
4
5
6
7
8

--mysql语法

create table students(
id int(5) primary key,
name varchar(10),
sal double(8,2)
);

4.创建和表对应的实体类

在工程中建立student类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

public class Student {

private Integer id;//编号

private String name;//姓名

private Double sal;//薪水

public Student(){}

public Student(Integer id, String name, Double sal) {

this.id = id;

this.name = name;

this.sal = sal;

}

。。。。。

此处省略了getset方法

5.在studnet类对应的包下建立StudentMapper.xml配置文件

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

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


<!-- namespace属性是名称空间,必须唯一,一般为类名 -->

<mapper namespace="com.rlovep.hello.Student">

<!-- resultMap标签:映射实体与表

type属性:表示实体全路径名

id属性:为实体与表的映射取一个任意的唯一的名字

-->


<resultMap type="com.rlovep.hello.Student" id="studentMap">

<!-- id标签:映射主键属性

result标签:映射非主键属性

property属性:实体的属性名

column属性:表的字段名

-->


<id property="id" column="id"/>

<result property="name" column="name"/>

<result property="sal" column="sal"/>

</resultMap>

<!--

insert标签:要书写insert这么一个sql语句

id属性:为insert这么一个sql语句取一个任意唯一的名字

parameterType:要执行的dao中的方法的参数,如果是类的话,必须使用全路径类

-->


<insert id="add1">

insert into students(id,name,sal) value(1,'peace',5000)

</insert>

<!-- <insert id="com.rlovep.hello.Student">

insert into students(id,name,sal) values(#{id},#{name},#{sal})

</insert> -->




</mapper>

6.在src目录下建立mybatis的配置文件mybatis.xml

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

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

<!-- 设置一个默认的连接环境信息 -->

<environments default="mysql_developer">





<!-- 连接环境信息,取一个任意唯一的名字 -->

<environment id="mysql_developer">

<!-- mybatis使用jdbc事务管理方式 -->

<transactionManager type="jdbc"/>

<!-- mybatis使用连接池方式来获取连接 -->

<dataSource type="pooled">

<!-- 配置与数据库交互的4个必要属性 -->

<property name="driver" value="com.mysql.jdbc.Driver"/>

<property name="url" value="jdbc:mysql://localhost:3306/day01?useUnicode=true&amp;characterEncoding=UTF8"/>

<property name="username" value="root"/>

<property name="password" value="123456"/>

</dataSource>

</environment>



<!-- 连接环境信息,取一个任意唯一的名字 -->

<environment id="oracle_developer">

<!-- mybatis使用jdbc事务管理方式 -->

<transactionManager type="jdbc"/>

<!-- mybatis使用连接池方式来获取连接 -->

<dataSource type="pooled">

<!-- 配置与数据库交互的4个必要属性 -->

<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>

<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>

<property name="username" value="$username"/>

<property name="password" value="oracle.password"/>

</dataSource>

</environment>

</environments>

<!-- 加载映射文件-->

<mappers>

<mapper resource="com/rlovep/hello/StudentMapper.xml"/>

</mappers>

</configuration>

7)创建MyBatisUtil.java类,并测试与数据库是否能连接
建立com.rlovep.util包,并在包下建立MyBatisUtil.java类(可以创建在任何地方)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181


package com.rlovep.util;



import java.io.IOException;

import java.io.Reader;

import java.sql.Connection;



import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;



/**

*

* @ClassName: MyBatisUtil

* @Description: 创建单例工厂,可以获得线程session

* @author peace w_peace12@163.com

* @date 27 Mar 2016 10:01:45 pm

*

*/


public class MyBatisUtil {

// 创建线程独立的session

private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();

// sqlsession 工厂

private static SqlSessionFactory sqlSessionFactory;



/**

* 加载位于src/mybatis.xml配置文件

*/


static {

try {

// 获得配置文件字符流

Reader reader = Resources.getResourceAsReader("mybatis.xml");

// 通过配置文件创建工厂

sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);



} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}



/**

*

* <p>

* Title:

* </p>

* <p>

* Description:禁止外界new 该工具类

* </p>

*/


private MyBatisUtil() {



}



/**

* 获取session,线程独立

*/


public static SqlSession getSqlsession() {

// 从当前线程中获取SqlSession对象

SqlSession sqlSession = threadLocal.get();

// 如果SqlSession对象为空

if (sqlSession == null) {

// 在SqlSessionFactory非空的情况下,获取SqlSession对象

sqlSession = sqlSessionFactory.openSession();

// 将SqlSession对象与当前线程绑定在一起

threadLocal.set(sqlSession);

}

// 返回SqlSession对象

return sqlSession;

}



/**

* 关闭SqlSession与当前线程分开

*/


public static void closeSqlSession() {

// 从当前线程中获取SqlSession对象

SqlSession sqlSession = threadLocal.get();

// 如果SqlSession对象非空

if (sqlSession != null) {

// 关闭SqlSession对象

sqlSession.close();

// 分开当前线程与SqlSession对象的关系,目的是让GC尽早回收

threadLocal.remove();

}

}

public static void main(String[] args) {

Connection conn = MyBatisUtil.getSqlsession().getConnection();

System.out.println(conn!=null?"连接成功":"连接失败");

}

}

8.在student类的包下建立StudentDao.java类并测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57


public class StudentDao {

public void add1()throws Exception{

SqlSession sqlSession=null;

try{

//获得sqlsession

sqlSession=MyBatisUtil.getSqlsession();

//默认事务开始

//调用在映射文件中声明的方法

int i=sqlSession.insert("com.rlovep.hello.Student.add1");

System.out.println("影响了"+i+"行");

//事务提交

sqlSession.commit();



}catch(Exception e)

{

e.printStackTrace();

//事务回滚

sqlSession.rollback();

throw e;

}finally {

MyBatisUtil.closeSqlSession();

}

}

public static void main(String[] args) throws Exception{

StudentDao dao=new StudentDao();

dao.add1();

}

}

9.测试如下

控制台的输出如下:

影响了1行

数据库增加了一行

02

10开启log4j

1.导入jar包:log4j-1.2.17.jar

2.在src目录下:建立log4j.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27


log4j.rootLogger=debug,stdout,logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

log4j.appender.logfile=org.apache.log4j.FileAppender

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n

log4j.logger.com.ibatis=DEBUG

log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG

log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG

log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG

log4j.logger.java.sql.Connection=DEBUG

log4j.logger.java.sql.Statement=DEBUG

log4j.logger.java.sql.PreparedStatement=DEBUG

3.直接运行即可,不需要在配置,控制台显示如下:

03

好的本章介绍到这里
来自伊豚wpeace(rlovep.com,blog.wpeace.cn)

Peace wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!