java之mybatis之使用mybatis实现crud操作
目录结构:
1.封装 mybatis 的工具类:
MybatisUtil.java
public class MybatisUtil { private static SqlSessionFactory getSqlSessionFactory() throws IOException{ Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml"); return new SqlSessionFactoryBuilder().build(reader); } public static SqlSession getSqlSession() throws IOException{ //填写参数 true表示事务自动提交 return getSqlSessionFactory().openSession(true); } }
2.vo类
User.java

1 public class User implements Serializable{ 2 private int id; 3 private String name; 4 private int age; 5 public int getId() { 6 return id; 7 } 8 public void setId(int id) { 9 this.id = id; 10 } 11 public String getName() { 12 return name; 13 } 14 public void setName(String name) { 15 this.name = name; 16 } 17 public int getAge() { 18 return age; 19 } 20 public void setAge(int age) { 21 this.age = age; 22 } 23 @Override 24 public String toString() { 25 return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; 26 } 27 }
3.映射文件
UserMapper.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用来指定映射文件的命名空间,在这里通过namespace可以找到该空间下的所有的 sql语句映射。namespace的命名通常和应该映射文件所在【包名+映射文件名】 --> <mapper namespace="cn.sxt.vo.UserMapper"> <select id="findAll" resultType="User"> select * from t_user </select> <!-- select用来编写查询的sql语句 id在同一个namespace下是唯一的。 parameterType用来指定参数类型 #{id} 占位符 输入参数将会填充。建议和参数名要相同 resultType 用来指定返回值类型 --> <select id="selectUser" parameterType="int" resultType="User"> select * from t_user where id = #{id} </select> <!-- insert用来映射插入语句 useGeneratedKeys 为true表示使用主键自增策略 parameterType用来指定参数类型 占位符中的 名称是参数的属性名,并且要提供get/set方法 --> <insert id="insertUser" useGeneratedKeys="true" parameterType="User"> insert into t_user(name,age) values(#{name},#{age}) </insert> <!-- delete 用来指定删除语句 --> <delete id="deleteUser" parameterType="int"> delete from t_user where id=#{id} </delete> <!-- update 用来指定更新语句 --> <update id="updateUser" parameterType="User"> update t_user set name=#{name},age=#{age} where id=#{id} </update> </mapper>
4.核心配置文件
mybatis.cfg.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> <!-- 它们都是外部化,可替代的属性。可以配置在一个典型的Java 属性文件中,或者通过 properties 元素的子元素进行配置 --> <properties resource="jdbc.properties"></properties> <!-- 别名是一个较短的Java 类型的名称。用来设置别名 --> <typeAliases> <!-- 为指定的包下所有类设置别名,别名默认为类名 --> <package name="cn.sxt.vo"/> <!-- 为指定的类型设置别名 <typeAlias type="cn.sxt.vo.User" alias="User"/> --> </typeAliases> <!-- MyBatis 能够配置多套运行环境,这有助于将您的SQL 映射到多个数据库上。例如,在您的 开发、测试、生产环境中,您可能有不同的配置。 default指向默认使用的环境 --> <environments default="development"> <environment id="development"> <!-- JDBC – 这个配置直接使用JDBC 的提交和回滚功能。它依赖于从数据源获得连接来管理 事务的生命周期。 • MANAGED – 这个配置基本上什么都不做。它从不提交或者回滚一个连接的事务。而是让 容器(例如:Spring 或者J2EE 应用服务器)来管理事务的生命周期。 --> <transactionManager type="JDBC" /> <!-- UNPOOLED – 这个类型的数据源实现只是在每次需要的时候简单地打开和关闭连接。 POOLED – 这个数据源的实现缓存了JDBC 连接对象,用于避免每次创建新的数据库连接时都初始 化和进行认证,加快程序响应。并发WEB 应用通常通过这种做法来获得快速响应。 JNDI – 这个数据源的配置是为了准备与像Spring 或应用服务器能够在外部或者内部配置数据 源的容器一起使用,然后在JNDI 上下文中引用它。 --> <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> <!-- sql语句的映射文件配置 --> <mapper resource="cn/sxt/vo/UserMapper.xml"/> </mappers> </configuration>
jdbc.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test username=root password=1111
5.测试
MybatisTest.java
public class MybatisTest { @Test public void testAdd() throws IOException{ User user = new User(); user.setName("刘德华"); user.setAge(55); SqlSession session = MybatisUtil.getSqlSession(); //增 删 改 返回值为受影响的行数 session.insert("cn.sxt.vo.UserMapper.insertUser", user); session.close(); } @Test public void testUpdate() throws IOException{ SqlSession session = MybatisUtil.getSqlSession(); User user=session.selectOne("cn.sxt.vo.UserMapper.selectUser", 1); user.setName("彰五金"); session.update("cn.sxt.vo.UserMapper.updateUser",user); session.close(); } @Test public void testDelete() throws IOException{ SqlSession session = MybatisUtil.getSqlSession(); session.delete("cn.sxt.vo.UserMapper.deleteUser", 3); session.close(); } @Test public void testFindAll() throws IOException{ SqlSession session = MybatisUtil.getSqlSession(); List<User> list = session.selectList("cn.sxt.vo.UserMapper.findAll"); for(User u:list){ System.out.println(u); } session.close(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现