什么是Mybatis
Mybatis是一款优秀的持久层框架
为什么需要Mybatis
传统的JDBC代码太复杂
帮助程序员将数据存入到数据库中
sql和代码分离
创建包分类
![](https://i-blog.csdnimg.cn/blog_migrate/bb29692395c9c9392939f524972aeb0b.png)
创建测试的数据库
#判断存在即删除数据库
drop database if exists mydb;
#创建数据库
create database mydb;
#使用数据库
use mydb;
#创建表
create table t_user
(
uid int primary key auto_increment,
username varchar(20),
password varchar(20),
phone varchar(11),
address varchar(50)
);
insert into t_user(username,password,phone,address) values('张三','666','18965423548','南阳');
insert into t_user(username,password,phone,address) values('李四','333','18754263548','许昌');
insert into t_user(username,password,phone,address) values('小美','123','18565234759','信阳');
2.创建一个Java项目并导入mybatis框架的jar包
在项目中创建一个lib文件夹放入mybatis框架的jar包,并导入项目中。
![](https://i-blog.csdnimg.cn/blog_migrate/8ec7d00bd57a92ede5f894fa7fea06e7.png)
3.创建跟表对应的实体类。
在src中创建com.chen.bean包,然后创建User实体类。
public class User {
private Integer uid;
private String username;
private String password;
private String phone;
private String address;
...
//get\set方法
//toString方法
4.创建针对表操作的接口类。
在src中创建com.chen.dao包,然后创建UserDao的接口,然后在接口中定义针对数据库的增删改查等操作。
public interface UserDao {
//全查
List<User> selectAll();
//根据id查询
User selectById(int uid);
//根据名字查询
List<User> selectName(String uname);
//添加
int add(User user);
//删除
int delete(int uid);
//修改
int upd(User user);
}
5.在接口的包中创建对应的mapper映射配置文件。
在dao接口的同目录下创建跟接口名字一样的配置文件。
<?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.chai.dao.UserDao">
<!--通过select标签进行查询
id:映射接口的方法名
parameterType:指定参数的类型(如果是集合类型只需要指定集合元素的类型即可)
resultType:指定返回值的类型
-->
<select id="selectAll" resultType="com.chai.bean.User">
select * from t_user;
</select>
<select id="selectById" parameterType="int" resultType="com.chai.bean.User">
select * from t_user where uid=#{uid};
</select>
<select id="selectName" parameterType="String" resultType="com.chai.bean.User">
select * from t_user where username like concat('%',#{username},'%')
</select>
<insert id="add" parameterType="com.chai.bean.User">
insert into t_user(username,password,phone,address) values(#{username},#{password},#{phone},#{address});
</insert>
<delete id="delete" parameterType="int">
delete from t_user where uid=#{uid};
</delete>
<update id="upd" parameterType="com.chai.bean.User">
update t_user set username=#{username},password=#{password},phone=#{phone},address=#{address} where uid=#{uid};
</update>
</mapper>
6.在src目录中创建mybatis框架的核心配置文件。
在src中创建一个文件,命名为mybais.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>
<!--配置环境信息===就是配置连接数据库的参数
default:指定配置的环境信息的id,表示默认连接该环境
-->
<environments default="mysql">
<environment id="mysql">
<!--配置事务的处理方式:模式使用JDBC的事务处理-->
<transactionManager type="jdbc"></transactionManager>
<!--数据源的默认type设置为pooled,表示使用连接池-->
<dataSource type="pooled">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--加载mapper配置文件-->
<mappers>
<mapper class="com.chai.dao.UserDao"></mapper>
</mappers>
</configuration>
7.在测试类中进行测试
package com.chai.test;
import com.chai.bean.User;
import com.chai.dao.UserDao;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class UserTest {
InputStream stream=null;
SqlSessionFactoryBuilder builder=null;
SqlSessionFactory factory=null;
SqlSession sqlSession=null;
UserDao userDao=null;
@Before
public void init() throws IOException {
//1.加载核心配置文件的字节输入流
stream= Resources.getResourceAsStream("mybais.xml");
//2.创建SqlSessionFactory的构建对象--框架使用的是构建者模式
builder=new SqlSessionFactoryBuilder();
//3.通过构建对象加载配置文件的输入流获取SqlSessionFactory
factory=builder.build(stream);
//4.通过工厂对象获取SqlSession对象----执行JDBC操作的
sqlSession=factory.openSession();
//5.通过SqlSession对象获取接口对应的代理对象
userDao=sqlSession.getMapper(UserDao.class);
}
@Test
public void testSelectAll() {
//6.通过代理对象执行查询方法
List<User> userList=userDao.selectAll();
//7.遍历集合
for (User user:userList){
System.out.println(user);
}
}
@Test
public void testAdd() {
User user=new User();
user.setUsername("李明");
user.setPassword("111");
user.setPhone("13999999999");
user.setAddress("郑州");
int n=userDao.add(user);
if (n>0){
System.out.println("s");
}else {
System.out.println("c");
}
}
@Test
public void testDelete(){
int n=userDao.delete(6);
if (n>0){
System.out.println("s");
}
}
@Test
public void testUpdate(){
User oldUser = userDao.selectById(5);
System.out.println(oldUser);
oldUser.setUsername("xx");
oldUser.setAddress("河南郑州");
userDao.upd(oldUser);
User newUser = userDao.selectById(5);
System.out.println(newUser);
}
@Test
public void selNameTest(){
String uname = "x";
List<User> userList=userDao.selectName(uname);
for (User user:userList){
System.out.println(user);
}
}
@After
public void distroy() throws IOException {
sqlSession.commit();
sqlSession.close();
stream.close();
}
}
运行结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/b57566005c8e283897d1d5d849c86819.png)