MyBatis是一个持久层框架(即操作数据库),可以帮助我们省略JDBC
用法:就是在maven项目中导入MyBatis包
先导知识:JavaWeb学习笔记(二) IDEA中创建maven项目以及导包方法
获取方式:
1. Github: Releases · mybatis/mybatis-3 · GitHub
2. maven仓库
一、查询数据库的全过程
1. 新建空的maven项目,删除src文件夹
2. 在pom.xml中导包:junit (用于单元测试); mysql-connector-java ; mybatis ;
3. 新建子模块:普通的maven项目
注意:新建完只有一定要为文件夹标记属性,否则不会报错
4. 使用MyBatis获取SqlSessionFactory对象并从中获取SqlSession对象
idea中try/catch快捷键:选中要包裹代码+ Ctrl + Alt +t
在Java文件夹下新建utils文件夹以及MybatisUtils类
package 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;
public class MybatisUtils {
// 1.使用MyBatis获取sqlSessionFactory对象
private static SqlSessionFactory sqlSessionFactory;
static{
try {
String resource = "myBatis_config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
// 2.从 sqlSessionFactory 中获取SqlSession实例
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
5. 在MySQL中新建数据库、表格;略
6. 在java下面的pojo文件夹下建立对应的实体类即JavaBean
略,这两步直接使用开头先导知识第二篇中的mybatis数据库中的user表以及实体类 User.java,但是要重写这个函数
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
7. 在Java文件夹下的dao文件夹中新建UserMapper.java,在resource文件夹下新建UserMapper.xml
UserMapper.java是一个接口类
package dao;//用于操控实体类 User.java
import pojo.User;
import java.util.List;
public interface UserMapper {
//声明getUserList方法,返回值是User列表
List<User> getUserList();
}
UserMapper.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="dao.UserMapper">
<select id="getUserList" resultType="pojo.User">
select * from mybatis.user;
</select>
</mapper>
namespace是实现了哪个接口,id是实现了接口里的哪个方法,resultType是返回值类型是哪个实体类
8. 配置mybatis连接数据库:
新建一个文件
<?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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
每个接口实现类的xml文件都必须在这里注册
9. 测试
在test文件中写,文件夹的格式要和上面一样,并且都是一一对应的,每个dao都对应一个测试文件
package dao;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.MybatisUtils;
import java.util.List;
public class UserDaoTest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
List<User> userList = userDao.getUserList();
for(User user:userList){
System.out.println(user.toString());
}
sqlSession.close();
}
}
二、普通的增删改查CRUD
有三个文件受到影响,以下只显示新增部分
UserMapper.java
User getUserById(int id);
int addUser(User user);
int updateUser(User user);
int deleteUser(int id);
UserDaoTest.java
@Test
public void getUserById(){
SqlSession sqlSession=MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//只有这两步需要修改
User user= mapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
@Test
public void addUser(){
SqlSession sqlSession=MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.addUser(new User(4, "发财", "1233"));
if(res>0){
System.out.println("success");
}
sqlSession.commit(); //增删改要提交事务
sqlSession.close();
}
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(4,"暴富","1237"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.deleteUser(4);
sqlSession.commit();
sqlSession.close();
}
UserMapper.xml
<select id="getUserById" parameterType="int" resultType="pojo.User">
select * from mybatis.user where userId=#{id};
</select>
<insert id="addUser" parameterType="pojo.User">
insert into mybatis.user (`userId`,`name`,`pwd`)values (#{userId},#{name},#{pwd});
</insert>
<update id="updateUser" parameterType="pojo.User">
update mybatis.user set name=#{name},pwd=#{pwd} where userId=#{userId};
</update>
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where userId=#{id};
</delete>
三、利用map增删改查
UserMapper.java
//插入部分属性
int addUser2(Map<String,Object> map);
//通过多个属性共同查询
User getUserByIdAndName(Map<String,Object> map);
UserDaoTest.java
@Test //插入部分属性
public void addUserT2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//
HashMap<String, Object> map = new HashMap<>();
map.put("userid",6);
map.put("passWord",12346);
//
mapper.addUser2(map);sqlSession.commit();
//
sqlSession.close();
}
@Test//通过单独的几个条件查询
public void getUserByIdAndNameTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//
HashMap<String, Object> map = new HashMap<>();
map.put("id",1);
map.put("name","小发");
//
User user = mapper.getUserByIdAndName(map);
System.out.println(user);
sqlSession.close();
}
UserMapper.xml
<insert id="addUser2" parameterType="map">
insert into mybatis.user(userId,pwd) values (#{userid},#{passWord})
</insert>
<select id="getUserByIdAndName" parameterType="map" resultType="pojo.User">
select * from mybatis.user where userId=#{id} and name=#{name}
</select>
四、模糊查询
UserMapper.java
List<User> getUserLike(String value);
UserDaoTest.java
@Test
public void getUserLike(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userLike = mapper.getUserLike("%小%");
for (User user : userLike) {
System.out.println(user);
}
sqlSession.close();
}
UserMapper.xml
<select id="getUserLike" resultType="pojo.User" >
select * from mybatis.user where name like #{value}
</select>