2026年物业门控五金耗材推荐榜:中企创联工业品,小区/写字楼/物业多场景门控配件全覆盖
2026/3/2 14:07:46
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.english</groupId><artifactId>ssm-spring-part</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>mybatis-dynsql</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- mybatis依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></dependency><!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--junit5测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- SLF4J API(日志门面) --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></dependency><!-- 具体日志实现(如 Logback) --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId></dependency><!-- 分页插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId></dependency></dependencies></project>packagecom.english.pojo;importlombok.Data;@DatapublicclassStudent{privateIntegerid;privateStringname;privateStringgender;privateIntegerage;privateStringclasses;}packagecom.english.mapper;importcom.english.pojo.Student;importorg.apache.ibatis.annotations.Param;importjava.util.List;publicinterfaceStudentMapper{// 根据 姓名、年龄 查询学生信息List<Student>query(@Param("name")Stringname,@Param("age")Integerage);// 根据 学生id 更新学生的数据,要求传入的 name、age不为null的才更新intupdateById(@Param("id")Integerid,@Param("name")Stringname,@Param("age")Integerage);// 如果name不为null,就根据name查询;如果name为null,age不为null,就根据age查询;如果name、age都为null,就查询全部List<Student>queryChoose(@Param("name")Stringname,@Param("age")Integerage);// 根据 id 批量查询List<Student>queryBatch(@Param("ids")List<Integer>ids);// 根据 id 批量删除intdeleteBatch(@Param("ids")List<Integer>ids);// 根据 id 批量插入intinsertBatch(@Param("list")List<Student>list);// 根据 id 批量修改intupdateBatch(@Param("list")List<Student>list);}<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTO Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.english.mapper.StudentMapper"><!-- if标签的test属性中,能访问实体类的属性,不能访问数据库表的字段; if标签中,">" 用 ">" "<" 用 "<" --><!-- List<Student> query(@Param("name") String name, @Param("age") Integer age); --><selectid="query"resultType="student">select * from students<where><iftest="name != null">name = #{name}</if><iftest="age != null and age>20">and age = #{age}</if></where></select><!-- int updateById(Integer id, @Param("name") String name, @Param("age") Integer age); --><updateid="updateById">update students<set><iftest="name != null">name = #{name},<!-- 这里必须有个 逗号,否则就报错 --></if><iftest="age != null">age = #{age}</if></set>where id = #{id}</update><!-- 如果name不为null,就根据name查询;如果name为null,age不为null,就根据age查询;如果name、age都为null,就查询全部 --><!-- List<Student> queryChoose(@Param("name") String name, @Param("age") Integer age); --><selectid="queryChoose"resultType="student">select * from students where<choose><whentest="name != null">name = #{name}</when><whentest="age != null">age = #{age}</when><otherwise>1=1</otherwise></choose></select><!-- 根据 id 批量查询 --><!-- List<Student> queryBatch(@Param("ids") List<Integer> ids); --><selectid="queryBatch"resultType="student">select * from students where id in<!-- 假设要遍历的数据ids = (1, 2, 3, 4) collection:要遍历的数据 open:遍历之前,要追加的字符串,这里是 "(" separator:每次遍历的分隔符号,这里是 "," 如果是最后一次,就不追加 close:遍历之后,要追加的字符串,这里是 ")" item:获取每个遍历项,这里是"1 2 3 4" --><foreachcollection="ids"open="("separator=","close=")"item="id"><!-- 遍历的内容,就是,item属性的值 -->#{id}</foreach></select><!-- 根据 id 批量删除 --><!-- int deleteBatch(@Param("ids") List<Integer> ids); --><deleteid="deleteBatch">delete from students where id in<foreachcollection="ids"open="("separator=","close=")"item="id">#{id}</foreach></delete><!-- 根据 id 批量插入 --><!-- int insertBatch(@Param("list") List<Student> list); --><insertid="insertBatch"><!-- insert into students (id, name, gender, age, class) values (11, "咯咯咯", "男", 8, "高中八班"), (12, "呵呵呵", "男", 110, "高中八班") -->insert into students (id, name, gender, age, class) values<foreachcollection="list"separator=","item="student">(#{student.id}, #{student.name}, #{student.gender}, #{student.age}, #{student.class})</foreach></insert><!-- 根据 id 批量修改 --><!-- int updateBatch(@Param("list") List<Student> list); --><!-- 批量插入的例子本质上是一条SQL语句, 而批量更新,则需要多条SQL语句拼起来,用分号分开,也就是一次性发送多条SQL语句让数据库执行, 需要配置 allowMultiQueries = true 才行 <property name="url" value="jdbc:mysql:///my_study_db?allowMultiQueries=true"/> --><updateid="updateBatch"><!-- update students set name = "改名1", age = 55 WHERE id = 5--><foreachcollection="list"item="stu">update students set name = #{stu.name}, age = #{stu.age} WHERE id = #{id}</foreach></update></mapper><?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTO Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><settings><!-- 开启mybatis的日志输出,使用system进行控制台输出 --><settingname="logImpl"value="STDOUT_LOGGING"/><!-- 开启,驼峰式自动映射(数据库表中某列是a_col,映射到java中就成了aCol) --><settingname="mapUnderscoreToCamelCase"value="true"/></settings><typeAliases><!-- 方式1:单独定义--><!-- <typeAlias type="com.atguigu.pojo.Employee" alias="ergouzi"/> --><!-- 方式2:批量将包下的类,给与别名,别名就是类的首字母小写 --><packagename="com.english.pojo"/><!-- 在方式2的情况下,如果某个文件需要单独设置别名,将注解@Alias("ergouzi")加到这个类上即可 --></typeAliases><!-- 配置分页插件--><plugins><plugininterceptor="com.github.pagehelper.PageInterceptor"><propertyname="helperDialect"value="mysql"/></plugin></plugins><!-- 配置mybatis的开发环境,使用 default 指定实际运行时使用的环境 --><environmentsdefault="development"><environmentid="development"><!-- transactionManager:配置 Mybatis 的 内置事务管理器,type设置为JDBC,表示,使用MyBatis内置的JDBC事务管理器 --><transactionManagertype="JDBC"></transactionManager><!-- dataSource:配置数据源,type属性设置为POOLED,表示使用连接池 --><dataSourcetype="POOLED"><propertyname="driver"value="com.mysql.cj.jdbc.Driver"/><propertyname="url"value="jdbc:mysql:///my_study_db?allowMultiQueries=true"/><propertyname="username"value="root"/><propertyname="password"value="root"/></dataSource></environment></environments><!-- mappers:用于配置Mapper映射文件,这里注册了一个位于mappers目录下的EmployeeMapper.xml文件。--><!-- <mappers>--><!-- <mapper resource="mappers/StudentMapper.xml"/>--><!-- </mappers>--><!-- 优化:不需要一个一个把 XxxMapper.xml 在这里注册了 --><mappers><!-- 批量注册mapper.xml 1、要求 Mapper.xml 与 mapper接口名必须相同 2、最终打包的位置要一致 在 resources 目录下创建 mapper接口对应是xml文件时,也创建个com.english.mapper包 就行了, 然后在这个包里面创建Mapper.xml文件 --><packagename="com.english.mapper"/></mappers></configuration>importcom.english.mapper.StudentMapper;importcom.english.pojo.Student;importcom.github.pagehelper.PageHelper;importcom.github.pagehelper.PageInfo;importlombok.extern.slf4j.Slf4j;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importjava.io.IOException;importjava.io.InputStream;importjava.util.List;@Slf4jpublicclassMyTest{privateSqlSessionsqlSession;// junit 会在每一个 @Test方法 前,执行 @BeforeEach方法@BeforeEachpublicvoidinit()throwsIOException{InputStreamipt=Resources.getResourceAsStream("mybatis-config.xml");sqlSession=newSqlSessionFactoryBuilder().build(ipt).openSession();}@Testpublicvoidtest_1(){StudentMappermapper=sqlSession.getMapper(StudentMapper.class);List<Student>list=mapper.query(null,88);System.out.println("list= "+list);}@Testpublicvoidtest_2(){StudentMappermapper=sqlSession.getMapper(StudentMapper.class);inta=mapper.updateById(2,"哈哈哈",18);System.out.println("a="+a);}// 使用分页插件@Testpublicvoidtest_3(){StudentMappermapper=sqlSession.getMapper(StudentMapper.class);// 设置分页数据(当前是第几页,每页几条数据)PageHelper.startPage(1,10);List<Student>stuList=mapper.queryChoose(null,null);// 将查询数据封装到一个 PageInfo的分页实体类PageInfo<Student>pageInfo=newPageInfo<>(stuList);// 获取当前页的数据List<Student>list_1=pageInfo.getList();// 获取总页数intpages=pageInfo.getPages();// 获取总条数longtotal=pageInfo.getTotal();intpageNum=pageInfo.getPageNum();intpageSize=pageInfo.getPageSize();System.out.println("list_1= "+list_1);System.out.println("pages= "+pages);System.out.println("total= "+total);System.out.println("pageNum= "+pageNum);System.out.println("pageSize= "+pageSize);}// junit 会在每一个 @Test方法 后,执行 @AfterEach方法@AfterEachpublicvoidclear(){sqlSession.commit();sqlSession.close();}}