Mybatis学习
文章目录
Mybatis简介
- MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
- MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
- MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO 为数据库中的记录。
什么是持久层
- 完成持久化工作的代码块
- 持久化数据就是对数据的存储,也就是使用数据库保存数据
为什么使用Mybits
- 方便快捷
- 用来替代JDBC从而更加方便的对数据库进行操作
Mybatis使用
Mybatis配置准备
1、Maven导包
一共需要三个依赖库 junit mybatis mysql
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-mxj-db-files</artifactId>
<version>5.0.12</version>
</dependency>
</dependencies>
2、从xml配置数据库的连接
resourcse文件中新建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://localhost:3306/41905037?useUnicode=true&characterEncoding=UTF-8"/><!--数据库连接地址-->
<property name="username" value="root"/><!--用户名-->
<property name="password" value="123456"/><!--密码-->
</dataSource>
</environment>
</environments>
</configuration>
3、构建 SqlSessionFactory
使用封装的形式构建SqlSessionFactory工厂
1、java文件中新建until包
2、until包下新建MybatisUntils.class文件
3、添加一下代码
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory ;
//构建SqlSessionFactory 工厂
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
}
}
4、从工厂中获取获得 SqlSession 的实例
//从工厂中获得SqlSession实例
//SqlSession包含了面向数据库执行 SQL 命令所需的所有方法
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
实现数据库表的操作
1、实体类
对数据库中的表进行实体化封装
2、接口类
编写对表操作的方法
3、接口实现类
实现以上的方法(Mybatis使用xml文件进行实现)
1、实体类
实体类
- 表中属性私有化
- 各个属性得getset方法重写
- 重写传参方法,toString方法
package com.ben.pojo;
//类名就是对应表的名字
//属性为表中的字段名
public class S1 {
private String sno;
private String sn;
private String sex;
private int age;
private String school;
@Override
public String toString() {
return "S1{" +
"sno='" + sno + '\'' +
", sn='" + sn + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", school='" + school + '\'' +
'}';
}
public S1() {
}
public S1(String sno, String sn, String sex, int age, String school) {
this.sno = sno;
this.sn = sn;
this.sex = sex;
this.age = age;
this.school = school;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
}
2、接口类
package com.ben.dao;
import com.ben.pojo.S1;
import java.util.List;
//接口中编写对表操作的方法
public interface S1Dao {
List<S1> getS1List();
}
3、实现接口(xml文件)
需要注意的地方
- namespace 代表了接口类的地址
- id 代表了接口类中的对应方法名
- resultType 代表了返回类型 使用对应表的实体类地址
<?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.ben.dao.S1Dao">
<select id="getS1List" resultType="com.ben.pojo.S1">
select * from S1
</select>
</mapper>
4、mybatis-config.xml配置文件中注册实现接口的mapper.xml文件
<mappers>
<mapper resource="com/ben/dao/S1Mapper.xml"/>
</mappers>
测试类
1、获取SqlSession对象
2、获取mapper对象
@Test
public void test(){
//获取
SqlSession sqlSession = MybatisUtils.getSqlSession();
S1Dao mapper = sqlSession.getMapper(S1Dao.class);
List<S1> s1List = mapper.getS1List();
for (S1 s1 : s1List){
System.out.println(s1.getSchool()+"\t");
}
sqlSession.close();
}
小结
- SqlSessionFactoryBuilder
- SqlSessionFactor
- SqlSession
增删改查
重点
//增删改操作必须提交事务! sqlSession.commit(); //使用sqlSession需要关闭 sqlSession.close();
接口文件
public interface S1Mapper {
//获取表全部内容
List<S1> getS1List();
//根据id查找
S1 getS1ById(String sno);
//插入语句
int addS1(S1 s1);
//修改语句
int updateS1(S1 s1);
//删除用户
int deleteS1(String sno);
}
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.ben.dao.S1Mapper">
<select id="getS1List" resultType="com.ben.pojo.S1">
select * from s1
</select>
<select id="getS1ById" resultType="com.ben.pojo.S1" parameterType="String">
select * from s1 where sno = #{sno}
</select>
<insert id="addS1" parameterType="com.ben.pojo.S1">
insert into s1(sno,sn,sex,age,school) values(#{sno},#{sn},#{sex},#{age},#{school
})
</insert>
<update id="updateS1" parameterType="com.ben.pojo.S1">
update s1
set sn=#{sn},sex=#{sex},age=#{age},school=#{school}
where sno = #{sno};
</update>
<delete id="deleteS1" parameterType="com.ben.pojo.S1">
delete from s1 where sno = #{sno}
</delete>
</mapper>
测试文件
public class S1DaoTest {
@Test
public void test(){
//获取
SqlSession sqlSession = MybatisUtils.getSqlSession();
S1Mapper mapper = sqlSession.getMapper(S1Mapper.class);
List<S1> s1List = mapper.getS1List();
for (S1 s1 : s1List){
System.out.println(s1);
}
sqlSession.close();
}
@Test
public void getS1BySno(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
S1Mapper mapper = sqlSession.getMapper(S1Mapper.class);
S1 s1 = mapper.getS1ById("s2");
System.out.println(s1);
sqlSession.close();
}
@Test
public void addS1(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
S1Mapper mapper = sqlSession.getMapper(S1Mapper.class);
int res = mapper.addS1(new S1("s4", "小王", "男", 30, "智能科技"));
if (res > 0){
System.out.println("插入成功!");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void updateS1(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
S1Mapper mapper = sqlSession.getMapper(S1Mapper.class);
int res = mapper.updateS1(new S1("s4", "修改", "女", 50, "护屋"));
if (res>0){
System.out.println("修改成功!");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteS1(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
S1Mapper mapper = sqlSession.getMapper(S1Mapper.class);
int res = mapper.deleteS1("s4");
if (res>0){
System.out.println("删除成功!");
}
sqlSession.commit();
sqlSession.close();
}
}