增删改查- 万能map- 模糊查询
1.编写接口
2.编写对应的mapper种的sql语句
3.测试
接口

public interface UserDao { List<User> getUserList(); //根据ID查询用户 User getUserId(int id); //增加一个用户 int addUser(User user); //修改一个用户 int update_User(User user); //删除一个用户 int deleteUser(int id); }
创建相关的实体类的时候,属性要和数据库对应的字段相同(一一对应),方便后面 传入对象 对数据库进行更改
比如数据库字段id name age, 创建的实体类User 属性就包括 int id , String name , int age 也包括相关的set get 方法
增删改查用特有的方式写到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接口--> <mapper namespace="com.ljm.dao.UserDao(接口路径)"> </mapper>
增

<insert id="addUser" parameterType="com.ljm.pojo.User" > insert into mybatis.user(name,age) value (#{name},#{age}); </insert>

public void test_addUser(){ SqlSession sqlSession=MybatisUtils.getSqlSession(); UserDao mapper=sqlSession.getMapper(UserDao.class); int number = mapper.addUser(new User("韩红",21)); System.out.println(number); //必须要提交事务 sqlSession.commit(); sqlSession.close();
删

<delete id="deleteUser" parameterType="int"> delete from mybatis.user where id=#{id} </delete> <!-- 这里实测 对象属性中没有id这一项 , 仅仅传递一个值(不是对象)的话 这样也能成功删除 -->

public void test_deleteUser(){ SqlSession sqlSession=MybatisUtils.getSqlSession(); UserDao mapper=sqlSession.getMapper(UserDao.class); int number = mapper.deleteUser(5); System.out.println(number); //必须要提交事务 sqlSession.commit(); sqlSession.close(); }
改

<update id="update_User" parameterType="com.ljm.pojo.User"> update mybatis.user set age =#{age},name =#{name} where id=6 </update> <!-- update: where id=6 是对象中的属性缺少与数据库字段对应(比如自增ID),可以直接再此写上数值 ,不推荐 ,还是对象属性全部覆盖字段会比较好 如 where id=#{id} -->

public void test_updateUser(){ SqlSession sqlSession=MybatisUtils.getSqlSession(); UserDao mapper=sqlSession.getMapper(UserDao.class); int number = mapper.update_User(new User("韩跑跑",28)); System.out.println(number); //必须要提交事务 sqlSession.commit(); sqlSession.close(); }
查(传入是对象的时候,也依然使用#{属性值}来取值)

<!-- parameterType 输入参数的类型--> <select id="getUserId" resultType="com.ljm.pojo.User" parameterType="int" > select * from mybatis.user where id =#{id} </select> <!-- 单传一个值的话(不是对象),对象中没有id这个属性也行-->

public void test_getUserbyID(){ SqlSession sqlSession=MybatisUtils.getSqlSession(); UserDao mapper=sqlSession.getMapper(UserDao.class); User user = mapper.getUserId(3); System.out.println(user); sqlSession.close(); }
模糊查询
自动提交事务:true

public static SqlSession getSqlSession(){ // SqlSession sqlSession= sqlSessionFactory.openSession(); // return sqlSession; //优化 true自动提交()增删改 return sqlSessionFactory.openSession(true); }
万能的Map
当实体类或者数据库中的表,字段过多, 需要传递多个参数, 就可以使用Map(或者注解)
遇到查询的时候,标签属性加上返回类型 resultMap=""
int getUserCount(Map<String, String> map);

<insert id="addUser2" parameterType="map" >
insert into mybatis.user(name,age) value (#{n},#{a});
</insert>
<!-- value (#{n},#{a} 里面的n a 对应传的参里面的 n a -->

public void test_addUser2(){ SqlSession sqlSession=MybatisUtils.getSqlSession(); UserDao mapper=sqlSession.getMapper(UserDao.class); Map<String, Object> map = new HashMap<>(); map.put("n","卫龙"); map.put("a","18"); //对应XML里面的n a int number = mapper.addUser2(map); System.out.println(number); //必须要提交事务 sqlSession.commit(); sqlSession.close(); }
模糊查询
1.在JAVA代码中传递通配符% %
List<User> userList = mapper.getUserLike("%卫%");
2.在SQL拼接使用通配符(推荐)

<select id="getUserLike" resultType="com.ljm.pojo.User" > select * from mybatis.user where name like "%"#{s}"%" </select> <!-- <select id="getUserLike" resultType="com.ljm.pojo.User" >--> <!-- select * from mybatis.user where name like CONCAT('%',#{s},'%')--> <!-- </select>-->
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?