Mybatis入门学习
文章目录
前言
mybatis学习第一章,入门尝试配置mybatis文件并尝试连接数据库。
一、mybatis是什么?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二、使用步骤
1.创造文件
选择Maven Archetype,创建即可。
2.在pom.xml中添加依赖
入门尝试,本次需要添加了两个依赖,分别是mysql-connector和mybatis.
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
</dependencies>
3.配置数据库配置文件
在resource文件夹中增加sql配置文件,理论上来说,这个文件可以任意取名字,但是根据官方配置,还是推荐取名为sqlMapConfig.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="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
在resource中再增加db.properties配置文件
配置内容如下
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
driver=com.mysql.cj.jdbc.Driver
username=“你的数据库用户名”
password=“密码”
initialSize=10
maxActive=20
然后在sqlMapConfig.xml中environments上增加一行
<properties resource="db.properties"></properties>
4.编写代码文件
建立和数据库数据相同格式的实体类
public class User {
private String id;
private String username;
private String password;
//此处省略生成getter和setter方法
}
建立数据库查询接口
public interface UserMapper {
public List<User> findUser();
}
此时结构如下
5. 编写SQL映射文件
在resource下创建文件夹mapper,并在文件夹中创造文件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">
<!-- 下方的namespace为接口类-->
<mapper namespace="org.example.mapper.UserMapper">
<!-- id是接口类中的方法,resultType为返回值的类型-->
<select id="findUser" resultType="org.example.bean.User">
select * from test
</select>
</mapper>
并在sqlMapConfig.xml中修改mapper
至此配置完成
5.测试
编写测试代码
public class test {
@Test
public void testfindUsers() throws IOException {
//加载配置文件
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//读取配置文件,构建与数据库连接的工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//获取连接对象
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> list = mapper.findUser();
for(User d:list){
System.out.println(d.getUsername());
}
session.close();
}
}
次数入门项目已经完成,剩下则是改进和其他配置。
6. 配置别名和批量配置
typeAliases类型别名,如下所示,即将org.example.bean.User 设置别名为User
<typeAliases>
<typeAlias type="org.example.bean.User" alias="User"></typeAlias>
</typeAliases>
配置过后,在mapper映射文件中result中的org.example.bean.User可以使用类型别名User
不过这种配置如果实体类较多,需要一个一个配置,很麻烦,所以可以进行批量配置。
直接将实体类所在的包写入其中,效果通类型别名一样。
<typeAliases>
<!-- <typeAlias type="org.example.bean.User" alias="User"></typeAlias>-->
<package name="org.example.bean"/>
</typeAliases>
同时,还要mapper文件的批量配置``
此时mapper映射的结构为
此时,将mapper包中的配置文件全部导入。
<mappers>
<!-- <mapper resource="mapper/mapper.xml"/>-->
<package name="org.example.mapper"/>
</mappers>
7.其他查询方法
在接口中补充新的方法
public interface UserMapper {
public List<User> findUser();
public int addUser(User user);
public int updateUser(User user);
public int deleteUser(int id);
}
并在mapper中编写映射文件
<select id="findUser" resultType="User">
select * from test
</select>
<insert id="addUser" parameterType="User">
insert into test(id,username,password) values(#{id},#{username},#{password})
</insert>
<update id="updateUser" parameterType="User">
update test set username = #{username},password=#{password} where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from test where id = #{id}
</delete>