Mybatis特性
支持定制化sql,
避免几乎所有的JDBC代码和手动设置参数获取结果集。换句话mybatis 就是JDBC的封装。
可以实用简单的xml或注解用于配置和原始映射。将接口和java的POJO(普通的java对象)映射成数据库中的记录。可以直接面向接口编程。有接口 不需要有实现类。
半自动的ORM映射框架。
mybiatis下载地址
https://github.com/mybatis/mybatis-3/releases
主要看官方文档。我们通过包管理 来管理架包。
持久层技术对比
Mybatis环境搭建和映射文件
环境:mysql5.7.x、idea2019、mybatis、
创建 空项目
配置jdk版本等参数
设置maven
创建maven工程
打包方式jar,直接访问数据库就行。
不需要war包不需要服务器的支持。
引入依赖
代码语言:javascript复制<!-- 设置打包方式为jar-->
<packaging>jar</packaging>
<dependencies>
<!-- mybatis核心-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- junit测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.3</version>
</dependency>
</dependencies>
创建mybatis的核心配置文件
习惯上命名mybatis-config.xml
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://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/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 引入映射文件-->
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
准备数据库
创建pojo实体对象 User
代码语言:javascript复制package top.thecat.mybatis.pojo;
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String email;
// 有参构造
public User(Integer id, String username, String password, Integer age, String email) {
this.id = id;
this.username = username;
this.password = password;
this.age = age;
this.email = email;
}
// 无参构造
public User(){};
// 有参无参构造方法
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
// toString
@Override
public String toString() {
return "User{"
"id=" id
", username='" username '''
", password='" password '''
", age=" age
", email='" email '''
'}';
}
}
创建接口
代码语言:javascript复制package top.thecat.mybatis.mapper;
public interface UserMapper {
/**
* mybatis 面向接口编程的两个一致。
* 1、映射文件的namespace要和mapper接口的全类名保持一致。
* 2、映射文件中sql语句的id要和mapper接口中的方法名一致。
*
* 表-实体类-mapper接口---映射文件。一一对应
*
*/
/**
* 添加用户信息
* */
int insertUser();
}
创建ORM映射文件(对象关系映射)
对象:java实体类对象
关系:关系型数据库
映射:二者之间的关系
创建映射文件
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.thecat.mybatis.mapper.UserMapper">
<!-- int insertUser();-->
<insert id="insertUser">
<!-- 正常写sql-->
insert into t_user values(null,'admin','123456','23','男','12345@qq.com');
</insert>
</mapper>
引入映射文件
代码语言:javascript复制<!-- 引入映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
小插曲
13是你自己的版本号
参考文章:https://zhuanlan.zhihu.com/p/547072781
添加、查询实现
添加数据
log4j 日志框架
pox.xml 添加
代码语言:javascript复制<!-- log4j日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
创建配置文文件log4j.xml
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
修改信息
修改成功
修改后 id4 的用户名为张三
### 删除
删除id5
UserMapper接口
代码语言:javascript复制package top.thecat.mybatis.mapper;
public interface UserMapper {
/**
* mybatis 面向接口编程的两个一致。
* 1、映射文件的namespace要和mapper接口的全类名保持一致。
* 2、映射文件中sql语句的id要和mapper接口中的方法名一致。
*
* 表-实体类-mapper接口---映射文件。一一对应
*
*/
/**
* 添加用户信息
* */
int insertUser();
/***
* 修改信息
*
*/
void updateUser();
/***
* 删除用户信息
*
*/
void deleteUser();
}
UserMapper.xml
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.thecat.mybatis.mapper.UserMapper">
<!-- int insertUser();-->
<insert id="insertUser">
<!-- 正常写sql-->
insert into t_user values(null,'admin','123456','23','男','12345@qq.com');
</insert>
<!-- void updateUser();-->
<update id="updateUser">
update t_user set username = '张三' where id = 4
</update>
<!-- void deleteUser();-->
<delete id="deleteUser">
delete from t_user where id= 5 ;
</delete>
</mapper>
测试文件
代码语言:javascript复制package top.thecat.mybatis.test;
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 top.thecat.mybatis.mapper.UserMapper;
import java.io.IOException;
import java.io.InputStream;
public class MyVatisTest {
@Test
public void testMyBatis() throws IOException {
// 加载核心配置文件。
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
// 获取 SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
// 获取sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(true); // 自动提交事务
// 获取mapper 接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 测试功能
int result = mapper.insertUser();
// int result = mapper.selectUser();
// 手动提交事务
// sqlSession.commit();
System.out.println("result:" result);
}
@Test
public void testCRUD() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 修改
// mapper.updateUser();
// 删除
mapper.deleteUser();
}
}
工学云习讯云黔职通自动打卡签到
最终项目展示: