基于xml的Mybatis 增删改查操作与配置说明

    技术2025-08-15  13

    基于xml的Mybatis 增删改查操作与配置说明

    目录结构

    核心依赖

    <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <!-- mysql驱动包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>

    1、编写dao接口

    //用户持久层接口 public interface IUserDao { /** *查询所有用户 * @return */ List<User> findAll(); /** *保存用户 * @param user */ void saveUser(User user); /** * 删除用户 * @param id */ void deleteUser(Integer id); /** *更新操作 * @param user */ void updataUser(User user); /** * 查询一个 * @param id */ User findone(Integer id); /** * 模糊查询 * @param username * @return */ List<User> findmohu(String username); List<User> findmohuorg(vo Susername); int shuliang(); }

    2、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="mysql"> <!--配置mysql环境--> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <!--配置链接数据库标准信息--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis01?characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--指定映射配置文件的位置,映射文件指每个Dao的独立配置文件--> <mappers> <mapper resource="com/ljq/dao/IUserDao.xml"/> <!-- class加载方式--> <!-- 仅适用于类路径下,接口文件与映射文件在同一路径下,且接口名与映射文件名相同,并且映射文件命名为接口全类名的情况.--> <!-- <mapper class="com.ljq.dao.IUserDao"></mapper>--> </mappers> <!--package 加载方式(class加载方式的简写方式) 适用于类路径下,接口文件与映射文件在同一路径下,且接口名与映射文件名相同,并且映射文件命名为接口全类名的情况. <mappers> //package的内容是接口所在包的全路径 <package name="com.ljq.dao"/> </mappers>--> </configuration>

    3、IUserDao.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.ljq.dao.IUserDao"> <!--配置查询所有--> <!--resultMap指定实体类中属性名与数据库类名的对应关系,可以解决实体类中属性名与数据库列名不一样的问题,也可通过sql语句取别名的方式解决--> <resultMap id="userMap" type="com.ljq.domain.User"> <!--主键字段对应--> <id property="id" column="id" ></id> <!--非主键字段对应--> <result property="username" column="username"></result> <result property="birthday" column="birthday"></result> <result property="sex" column="sex"></result> <result property="address" column="address"></result> </resultMap> <!--id是dao接口中的方法名--> <select id="findAll" resultMap="userMap"> <!--resultType为要封装的类名,这里用resultMap可以指定属性名称,保持名称一致可直接用resultType--> select * from user </select> <insert id="saveUser" parameterType="com.ljq.domain.User"><!--要传入数据的类型parameterType--> <!--配置插入操作后获得id的值--> <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER"> <!--keyProperty实体类的属性名称 keyColumn表的列名 resultType返回值类型 order执行顺序先/后--> select last_insert_id(); <!--这条sql语句是获取最后插入数据的id--> </selectKey> insert into user(username,address,sex,birthday)values (#{username},#{address},#{sex},#{birthday}); </insert><!--#{取出parameterType中的不同属性}--> <delete id="deleteUser" parameterType="Integer"> delete from user where id=#{uid} <!--只有一个参数取名随意,无需与实体类方法的形参名中一致--> </delete> <update id="updataUser" parameterType="com.ljq.domain.User"> update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}; </update> <select id="findone" resultType="com.ljq.domain.User" parameterType="int"> select * from user where id=#{uid} </select> <select id="findmohu" resultType="com.ljq.domain.User" parameterType="String"> select * from user where username like #{username} <!--如果没写%调用时要加上%--> <!--select * from user where username like '%${values}%'--> <!--必须写成value,使用${}代表使用的是Statement对象 而默认的#{}使用的是预编译的PreparedStatement对象--> </select> <select id="findmohuorg" resultType="com.ljq.domain.User" parameterType="com.ljq.domain.vo"> select * from user where username like #{user.username} <!--select * from user where username like '%${values}%'--> </select> <select id="shuliang" resultType="int"> select count(*) from user; </select> </mapper>

    测试

    public class MybatisTest { private InputStream in; private SqlSession sqlSession; private IUserDao userDao; @Before public void init() throws Exception { //1.读取配置文件 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建SqlSessionFactory工厂 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); //3.使用工厂生产SqlSession对象 sqlSession = factory.openSession(); //4.使用SqlSessiion创建Dao接口的代理对象 userDao = sqlSession.getMapper(IUserDao.class); } @After public void destory() throws Exception{ sqlSession.commit(); sqlSession.close(); in.close(); } //入门案例 @Test public void testfindAll() { List<User> users = userDao.findAll(); for (User user:users){ System.out.println(user); } } @Test public void testsave(){ User user = new User(); user.setUsername("阿良良子"); user.setAdress("公安县"); user.setSex("女"); user.setBirthday(new Date()); System.out.println(user); userDao.saveUser(user); System.out.println(user); } @Test public void testupdataUser(){ User user = new User(); user.setId(51); user.setUsername("阿良良木子"); user.setAdress("公安县"); user.setSex("男"); user.setBirthday(new Date()); userDao.updataUser(user); } @Test public void testdetele(){ userDao.deleteUser(52); } @Test public void testfindone(){ User user = new User(); user = userDao.findone(48); System.out.println(user.toString()); } @Test public void testfindmohu(){ List<User> users = new ArrayList<User>(); users = userDao.findmohu("%王%"); //users = userDao.findmohu("王"); for (User user:users){ System.out.println(user.toString()); } } @Test public void testfindmohuorg(){ User user = new User(); vo v = new vo(); user.setUsername("%王%"); v.setUser(user); //users = userDao.findmohu("王"); List<User> users = userDao.findmohuorg(v); for (User u:users){ System.out.println(u.toString()); } } @Test public void testshu(){ int count = userDao.shuliang(); System.out.println(count); } } List<User> users = userDao.findmohuorg(v); for (User u:users){ System.out.println(u.toString()); } } @Test public void testshu(){ int count = userDao.shuliang(); System.out.println(count); } }
    Processed: 0.011, SQL: 9