「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战」
1、什么是Mybatis?
MyBatis 是一款优秀的持久层框架/半自动的ORM,它支持自定义SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
优点:
1、与JDBC相比,减少了代码量
2、 最简单的持久化框架,简单易学
3、SQL代码从程序代码中彻底分离出来,可以重用
4、提供XML标签,支持编写动态SQL
5、提供映射标签,支持对象与数据库的ORM字段关系映射;支持缓存、连接池、数据库移植等
缺点:
1、SQL语句编写工作量大,熟练度要高
2、数据库移植性比较差,如果需要切换数据库的话,SQL语句会有很大的差异
2、搭建Mybatis项目
2.1 主要流程
2.2 导入mybatis相关依赖包和数据库驱动
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
复制代码
2.3 建表
2.4 创建实体类对象:UserInfo.java
public class UserInfo {
private Integer uid;
private String username;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
复制代码
2.5 创建对应的Mapper接口:UserInfoMapper.java
public interface UserInfoMapper {
// 根据id查询UserInfo实体
//@Select("select * from user_info where id=#{id}")
UserInfo selectUser(Integer id);
// 插入
Integer insertEmp(UserInfo emp);
}
复制代码
2.6 编写配置文件: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"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mysql"/>
<property name="username" value="root"/>
<property name="password" value="haitaiinc"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.zhl.mapper.UserInfoMapper"></mapper>
</mappers>
</configuration>
复制代码
2.7 编写Mapper接口对应的XML文件:UserInfoMapper.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.zhl.mapper.UserInfoMapper">
<!--根据id查询Emp实体-->
<select id="selectUser" resultType="com.zhl.entity.UserInfo">
select * from user_info where uid = #{id}
</select>
<insert id="insertUserInfo">
INSERT INTO
`mysql`.`user_info` ( `username`)
VALUES (#{username});
</insert>
</mapper>
复制代码
2.8 测试类
public class MybatisTest {
SqlSessionFactory sqlSessionFactory;
@Before
public void before(){
// 从 XML 中构建 SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test(){
try (SqlSession session = sqlSessionFactory.openSession()) {
UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
UserInfo userInfo = mapper.selectUser(1);
System.out.println(userInfo);
}
}
}
复制代码