MyBatis是Java SSM之一,负责持久层(dao)操作,以下是mybatis的事例,数据库请自备。
阅读本文章前,请务必了解 maven mysql mvc 等相关技术
目录
1.在这里我通过maven项目来进行演示,以下是pom.xml的内容
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ximu</groupId>
<artifactId>demo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>mybatis-01</module>
</modules>
<dependencies>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!-- 单元测试框架,如果你用main方法测试,junit可以不用 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 资源过滤,如果测试类不在xml所在位置同一个文件夹,不声明这个标签会无法正常运行 -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
2.mybatis配置文件
在maven项目中的resources文件夹下创建一个名为"mybatis-config.xml"的文件,没有要求必须是这个文件名,工具类能访问这个文件即可,下文会介绍,以下是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>
<!--默认环境-->
<environments default="development">
<environment id="development">
<!--事务管理,填写数据库参数-->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/ximu?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false"/>
<property name="username" value="root"/>
<property name="password" value="xzd020725"/>
</dataSource>
</environment>
</environments>
<!--每一个mapper.xml都需要在config里注册,下面会写什么是mapper.xml-->
<mappers>
<mapper resource="com/ximu/dao/UserMapper.xml"/>
</mappers>
</configuration>
3.创建mybatis工具类
在utils包下创建一个类,我取名为"MybatisUtils.java",代码如下
package com.ximu.utils;
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 java.io.InputStream;
//mybatis工具类
public class MybatisUtils {
//提高sqlSessionFactory作用域
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//获取sqlSessionFactory对象(工厂模式)
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (Exception e){
e.printStackTrace();
}
}
//创建执行sql的SqlSession对象
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
4.创建mapper
在写mapper前,我们还需要准备两件事,第一个是domain层创建一个实体类。第二个是创建dao层的接口,实体类不说明。接口是mapper命名空间绑定用的,详见mapper.xml。
例:
package com.ximu.dao;
import com.ximu.domain.User;
import java.util.List;
public interface UserDao {
List<User> getUserList();
}
mapper.xml:
<?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">
<!--命名空间绑定接口-->
<mapper namespace="com.ximu.dao.UserDao">
<!--resultType后面就是刚刚写的接口,resultType是返回的内容集,可以是其他类型-->
<select id="getUserList" resultType="com.ximu.domain.User">
/*sql语句*/
select * from ximu.user
</select>
</mapper>
5.测试
--在这里准备工作就完成了,可能有人会说为什么jdbc几句代码的事情要写这么麻烦。其实很简单,把这些写完后,其他的sql语句就只需要在mapper里复制粘贴了。几乎可以完全不写jdbc代码。
测试类我们写在项目中test文件里,如果之前maven配置里没写资源过滤是会报错的。新建一个测试类,不会用junit就用main方法测试。
import com.ximu.dao.UserDao;
import com.ximu.domain.User;
import com.ximu.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class Test {
@org.junit.Test
public void test(){
//获取sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//getmapper
UserDao ud = sqlSession.getMapper(UserDao.class);
List<User> userList = ud.getUserList();
for (User user : userList) {
System.out.println(user);
}
//关闭
sqlSession.close();
}
}
运行结果:
User{id=1, name='ximu', password='123456'}
6.备注
1.mybatis xml配置文件和mapper xml配置文件千万别写中文注释,不然查不到数据!!!如果你是直接复制的配置文件请把注释删掉!
2.注意mysql的驱动版本