整体流程的思路是这样子滴:
mybatis架构图是这样子滴:
实践出真理 -- 开干:
1.jar 包准备
1.1 log4j 是用来日志打印用的
1.2 mybatis-3.4.jar 是mybatis的jar 包
1.3 mysql 是jdbc 连接mysql 的jar 包
2.在Java Resource 目录下新建一个配置资源文件夹config
在config下创建log4j.propertites文件,代码如下:
其作用是因为mybatis默认使用log4j作为输出日志信息
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.在config下创建一个全局配置文件,mybatis-config.xml 文件
<?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>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/dbxie?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- 将我们写好的sql映射文件注册到全局配置文件中 -->
<mappers>
<mapper resource="cn/mybatis/bean/UserMapper.xml"/>
</mappers>
</configuration>
4.创建一个 POJO类 user 类 为例:
public class User {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
4.1数据库中创建与之相对应得表:user
5.在config目录下创建一个sqlmap目录,在sqlmap目录下新建一个usermapper.xml文件,里面编写操作user表的sql语句
<?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:命名空间,用于隔离sql语句,后继有重要重要
#{}:点位符,相当于jdbc的?
${}:字符串拼接指令,如果入参为普通数据类型{}内部只写value
-->
<mapper namespace="userMapper">
<!-- id:sql id,语句的唯一标识
parameterType:入参的数据类型
resultType:返回结果的数据类型
-->
<select id="getUserById" parameterType="int" resultType="com.xie.pojo.User">
SELECT
`id`,
`username`,
`birthday`,
`sex`,
`address`
FROM `user`
WHERE id = #{id}
</select>
<!-- resultType:如果返回结果为集合,只需设置为每一个的数据类型 -->
<select id="getUserByUserName" parameterType="string" resultType="com.xie.pojio.User">
select
`id`,
`username`,
`birthday`,
`sex`,
`address`
from `user`
<!-- WHERE username LIKE #{name} -->
where username like `%${value}%`
</select>
<!-- 插入用户 -->
<!-- useGeneratedKeys:使用自增 keyProperty与之配套使用,这里是user的主键-->
<insert id="insertUser" parameterType="com.xie.pojo.User" useGeneratedKeys="true" keyProperty="id">
<!-- selectKey:主键返回
keyProperty:user中的主键属性
resultType:主键数据类型
order:指定selectKey何时执行:AFTER之后
-->
<!-- <selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey> -->
INSERT INTO `user`
(`username`,
`birthday`,
`sex`,
`address`)
VALUES (#{username},
#{birthday},
#{sex},
#{address});
</insert>
</mapper>
6.在SqlMapConfig.xml中加载sql映射文件userMapper.xml
7.测试程序:
新建测试类MyBatisTest
package com.xie.dao;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
public class MyBatisTest {
private SqlSessionFactory sqlSessionFactory =null;
public void init() throws IOException {
//1.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder =new SqlSessionFactoryBuilder();
//2.加载SqlSessionFactory对象
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//3.创建SqlSessionFactory对象
this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
}
@Test
public void testQueryUserById() throws IOException {
//1.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder =new SqlSessionFactoryBuilder();
//2.加载SqlSessionFactory对象
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//3.创建SqlSessionFactory对象
sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//4.创建sqlsession对象
SqlSession session = sqlSessionFactory.openSession();
//5.执行sqlsession对象执行查询,获取结果user
Object user = session.selectOne("userMapper.getUserById",1);
System.out.println(user);
session.close();
}
}
测试结果:
8.优化程序,封装
package com.xie.util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* SqlSessionFactory工具类
* 获取封装好的SqlSessionFactory对象
* 返回一个SqlSessionFactory
* */
public class SqlSessionFactoryUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
// 创建核心配置文件的输入流
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 通过输入流创建SqlSessionFactory对象
sqlSessionFactory = ssfb.build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取SqlSessionFactory
* @return
*/
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
后面需要用到的时候就可以直接通过封装好的类去获取一个SqlSessionFactory对象了