跟着zz学Java 03-Mybatis框架的使用1-jar构建一个简单项目
程序员文章站
2022-04-18 16:45:47
...
前言
前面我们使用JDBC
实现了一个增删查改的操作,但是我们可以发现,这里面存在大量的冗余代码,在实际的开发当中我们都是使用一些封装好的框架进行开发的,这次我们使用的是Mybatis
这个框架
搭建环境
我们创建一个项目mybatis-jar
,并且引入mybatis
的jar包和mysql
的驱动包,这里就不截图了,跟之前的过程是一样的,jar包可以在我在码云这个项目的lib文件夹下面找到
实体类编写
在com.zz.pojo
目录下创建一个User的实体类,用于映射表user
package com.zz.pojo;
public class User {
private Integer id;
private String username;
private String password;
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;
}
}
创建Mybatis主配置文件
在src目录下创建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>
<!-- 类型别名,方便待会儿引用实体类,不用写全类名,只需要给出类名-->
<typeAliases>
<package name="com.zz.pojo"/>
</typeAliases>
<!-- 数据源的一些配置,跟JDBC里面可以联系起来理解-->
<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/sugon666?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root123"/>
</dataSource>
</environment>
</environments>
<!-- 指定mapper文件的地址,后面创建User的mapper文件的时候会在这个地址下面创建-->
<mappers>
<mapper resource="com/zz/pojo/User.xml"/>
</mappers>
</configuration>
User的配置文件
<?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">
<!--名称空间需要定义在pojo实体类路径-->
<mapper namespace="com.zz.pojo">
<!-- id 查询的标识符 resultMap指定查询到结果以后的映射返回类型,这个过程也是Mybatis的核心-->
<select id="listUser" resultType="User">
SELECT * from user
</select>
</mapper>
测试类
package com.zz.pojo;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class Test {
public static void main(String[] args) throws IOException {
// 根据配置文件去创建一个会话工厂
String resource = "mybatis-config.xml";
// 这里的 Resources 一定要是 org.apache.ibatis.io.Resources; 包下面的方法
InputStream resourceAsStream = Resources.getResourceAsStream(resource);
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = build.openSession();
// 通过 sqlSession 的selectList调用 listUser 配置在 User.xml 中的语句
List<User> listUser = sqlSession.selectList("listUser");
for (User user : listUser) {
System.out.println(user.getUsername());
}
}
}
整个流程的分析
1 应用程序找Mybatis
要数据
2 mybatis
从数据库中找来数据
2.1 通过mybatis-config.xml
定位哪个数据库
2.2 通过Category.xml
执行对应的select语句
2.3 基于Category.xml
把返回的数据库记录封装在 Category
对象中
2.4 把多个Category
对象装在一个Category
集合中
3 返回一个Category
集合
CRUD
为了方便我们的测试,我们添加junit
的jar包,待会就可以在一个类里面运行多个测试方法了
用户映射的配置
<?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">
<!--名称空间需要定义在pojo实体类路径-->
<mapper namespace="com.zz.pojo">
<!-- id 查询的标识符 resultType指定查询到结果以后的映射返回类型,这个过程也是Mybatis的核心-->
<select id="listUser" resultType="User">
SELECT * from user
</select>
<insert id="addUser" parameterType="User">
INSERT into user (username, password) values (#{username}, #{password})
</insert>
<delete id="deleteUser" parameterType="User">
delete from user where id=#{id}
</delete>
<select id="getUser" parameterType="int" resultType="User">
select * from user where id=#{id}
</select>
<update id="updateUser" parameterType="User">
update user set username=#{username} where id=#{id}
</update>
</mapper>
测试类
package com.zz.pojo;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestCRUD {
/**
* 测试获取一个用户
*
* @throws IOException
*/
@Test
public void TestGetUser() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
User c = session.selectOne("getUser",3);
System.out.println(c.getUsername());
session.commit();
session.close();
}
/**
* 测试增加一个用户
*
* @throws IOException
*/
@Test
public void TestAddUser() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
User user = new User();
user.setUsername("新增加的用户");
user.setPassword("password");
session.insert("addUser", user);
listAll(session);
session.commit();
session.close();
}
/**
* 测试删除一个用户
*
* @throws IOException
*/
@Test
public void TestDeleteUser() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
User user = new User();
user.setId(4);
session.delete("deleteUser", user);
listAll(session);
session.commit();
session.close();
}
/**
* 测试更新一个用户
*
* @throws IOException
*/
@Test
public void TestUpdateUser() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
User user = new User();
user.setId(3);
user.setUsername("修改后的username");
session.update("updateUser", user);
listAll(session);
session.commit();
session.close();
}
public static void listAll(SqlSession sqlSession) {
List<User> listUser = sqlSession.selectList("listUser");
for (User user : listUser) {
System.out.println(user.getUsername());
}
}
}
上一篇: kubernetes(一)kubeadm搭建k8s集群
下一篇: MinIO多用户权限管理