MyBatis介绍:
mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis 通过xml 或注解的方式将执行的各种statement 配置起来,并通过java 对象和statement 中sql的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql并将结果映射为 java 对象并返回。
采用 ORM ( Object relational mapping)思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与 jdbc api打交道,就可以完成对数据库的持久化操作。
ORM ( Object relational mapping):对象关系映射 javabean–关系型数据库MySQL
通过ORM解决sql语句执行结果映射为java对象 【表中字段–javabean属性 自动完成映射 就要求查询返回的字段和javabean的属性一致。】
官网: http://www.mybatis.org/mybatis-3/
接下来使用MyBatis实现CURD:
环境准备:
添加依赖
pom.xml配置文件:
4.0.0 com.Mr_Xu dya34 1.0-SNAPSHOT UTF-8 1.8 1.8 junit junit 4.12 test org.mybatis mybatis 3.4.6 mysql mysql-connector-java 5.1.47 org.projectlombok lombok 1.18.18
mybatis核心文件配置:
User实体类:
package com.Mr_Xu.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
private Integer uid;
private String username;
private String sex;
private Date birthday;
private String address;
}
实体类接口:
package com.Mr_Xu.dao;
import com.Mr_Xu.bean.User;
import java.util.List;
public interface UserDao {
//查询所有用户信息,封装到list集合中
List findAll();
int addUser(User user);
int deleteUser(Integer uid);
int Update(User user);
//根据姓氏查询用户列表 方式一:张% #{}
List getUserListByName1(String username);
//根据姓氏查询用户列表 方式二:${value}
List getUserListByName2(String username);
}
实体类映射文件:
使用测试方法实现基本CRUD:
package com.Mr_Xu;
import com.Mr_Xu.bean.User;
import com.Mr_Xu.dao.UserDao;
import com.Mr_Xu.utils.MyBatisUtils;
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;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class mybatisTest {
//添加
@Test
public void f2() throws Exception {
//获得mybatis核心类对象
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//加载核心配置文件
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//获得sqlSession对象
SqlSession SqlSession = sqlSessionFactory.openSession();
UserDao dao = SqlSession.getMapper(UserDao.class);
User user = new User();
user.setUsername("张三");
user.setSex("男");
user.setBirthday(new Date());
user.setAddress("深圳");
dao.addUser(user);
SqlSession.commit();
//释放资源
SqlSession.close();
}
//删除
@Test
public void f3() throws Exception {
//获取mybatis核心对象
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
dao.deleteUser(10 );
sqlSession.commit();
sqlSession.close();
}
//修改
@Test
public void f4() throws Exception {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
User user = new User(8,"李四","女",new Date(),"北京");
dao.Update(user);
sqlSession.commit();
sqlSession.close();
}
//查询
@Test
public void f1() throws Exception {
//得到MyBatis的核心配置文件的文件流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//加载MyBatis的核心配置文件 获得SqlSessionFactory对象
//使用了建造者模式和工厂模式,得到SqlSessionFactory 相当于连接池对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//获得sqlSession对象 相当于Connection对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//获得dao的代理对象 使用了代理模式
UserDao dao = sqlSession.getMapper(UserDao.class);
//调用方法操作
List list = dao.findAll();
for (User user : list) {
System.out.println("user = " + user);
}
//释放资源
sqlSession.close();
}
//模糊查询,方式1:#{username},'%'
@Test
public void f5() throws Exception {
//得到MyBatis的核心配置文件的文件流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//加载MyBatis的核心配置文件 获得SqlSessionFactory对象
//使用了建造者模式和工厂模式,得到SqlSessionFactory 相当于连接池对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//获得sqlSession对象 相当于Connection对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//获得dao的代理对象 使用了代理模式
UserDao dao = sqlSession.getMapper(UserDao.class);
//调用方法操作
List list = dao.getUserListByName1("张");
for (User user : list) {
System.out.println("user = " + user);
}
//关闭流
sqlSession.close();
is.close();
}
//方式二:${value}%
@Test
public void f6() throws Exception {
//获取核心文件流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//调用业务处理
UserDao dao = sqlSession.getMapper(UserDao.class);
//获取list集合
List list = dao.getUserListByName2("z");
for (User user : list) {
System.out.println("user = " + user);
}
//释放资源
sqlSession.close();
}
}
提取工具类:
package com.Mr_Xu.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.IOException;
import java.io.InputStream;
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//1.读取MyBatis核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2.加载MyBatis配置文件获取 SqlSessionFactory对象
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
System.err.println("加载MyBatis核心配置文件失败!");
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
public static void getClose(SqlSession sqlSession){
if (sqlSession != null){
sqlSession.close();
}
}
}
使用工具类实现:
//使用工具类改造
//增加
@Test
public void f10() throws Exception {
//调用dao处理业务
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
User user = new User(null,"张三","男",new Date(),"深圳");
dao.addUser(user);
//提交事务
sqlSession.commit();
//释放资源
MyBatisUtils.getClose(sqlSession);
}
//删除
@Test
public void f11(){
//获得SqlSession对象
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//调用业务处理
UserDao dao = sqlSession.getMapper(UserDao.class);
dao.deleteUser(8);
sqlSession.commit();
//释放资源
MyBatisUtils.getClose(sqlSession);
}
//修改
@Test
public void f12(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
User user = new User(7, "李四", "女", new Date(), "北京");
dao.Update(user);
sqlSession.commit();
MyBatisUtils.getClose(sqlSession);
}
//查看
@Test
public void f13(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
List list = dao.findAll();
for (User user : list) {
System.out.println("user = " + user);
}
sqlSession.commit();
MyBatisUtils.getClose(sqlSession);
}
//模糊查询,方式一:#{username},'%'
@Test
public void f14(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
List list = dao.getUserListByName1("李");
for (User user : list) {
System.out.println("user = " + user);
}
sqlSession.commit();
MyBatisUtils.getClose(sqlSession);
}
//方式二:${value}%
@Test
public void f15(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
List list = dao.getUserListByName2("l");
for (User user : list) {
System.out.println("user = " + user);
}
sqlSession.commit();
MyBatisUtils.getClose(sqlSession);
}



