这里所有的情况都是 不能直接使用 #{} 的情况
pojo类:
- /**
- * 和数据库表 t_user 对应的实体类
- */
- public class User {
- private Integer id;
- private String username;
- private String password;
- private Integer age;
- private String gender;
- private String email;
-
- public User() {
- }
-
- public User(Integer id, String username, String password, Integer age, String gender, String email) {
- this.id = id;
- this.username = username;
- this.password = password;
- this.age = age;
- this.gender = gender;
- this.email = email;
- }
-
- 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;
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- public String getGender() {
- return gender;
- }
-
- public void setGender(String gender) {
- this.gender = gender;
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(String email) {
- this.email = email;
- }
-
- @Override
- public String toString() {
- return "User{" +
- "id=" + id +
- ", username='" + username + '\'' +
- ", password='" + password + '\'' +
- ", age=" + age +
- ", gender='" + gender + '\'' +
- ", email='" + email + '\'' +
- '}';
- }
- }
工具类:
- package com.chenyixin.ssm.utils;
-
- 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.InputStream;
-
- public class SqlSessionUtil {
-
- public static SqlSession getSqlSession() {
- try {
- // 获取核心的配置文件
- InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
- // 创建 SqlSessionFactoryBuilder 对象
- SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
-
- // 通过核心配置文件多对应的字节输入流创建工厂类 SqlSessionFactory ,生产 SqlSession 对象
- SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(in);
-
- // 创建 SqlSession 对象(自动操作事务)
- return sqlSessionFactory.openSession(true);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
-
- }
- }
mybatis-config.xml:
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
-
-
- <properties resource="jdbc.properties"/>
-
- <typeAliases>
- <package name="com.chenyixin.ssm.pojo"/>
- typeAliases>
-
-
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC"/>
- <dataSource type="POOLED">
- <property name="driver" value="${jdbc.driver}"/>
- <property name="url" value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
- dataSource>
- environment>
-
- environments>
-
-
- <mappers>
-
- <package name="com.chenyixin.ssm.mapper"/>
- mappers>
- configuration>
数据库中的数据:
SpecialSQLMapper 接口:
- public interface SpecialSQLMapper {
-
- /**
- * 根据用户名含有 mohu 查询用户
- * @param mohu
- * @return
- */
- List
getUserByMohu(@Param("mohu") String mohu); - }
SpecialSQLMapper.xml 配置文件:
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
- <mapper namespace="com.chenyixin.ssm.mapper.SpecialSQLMapper">
-
-
- <select id="getUserByMohu" resultType="user">
-
-
- select * from t_user where username like "%"#{mohu}"%"
- select>
-
- mapper>
测试类:
- public class SpecialSQLMapperTest {
-
- SqlSession sqlSession = SqlSessionUtil.getSqlSession();
- SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);
-
- @Test
- public void getUserByMohu() {
- List
list = mapper.getUserByMohu("a"); - list.forEach(System.out::println);
- // User{id=15, username='admin', password='admin', age=20, gender='女', email='admin@qq.com'}
- // User{id=16, username='zhangsan', password='zhangsan', age=21, gender='女', email='zhangsan@qq.com'}
- }
- }
SpecialSQLMapper 接口:
- /**
- * 根据 id 批量删除记录
- * @param ids 要删除的 id
- * @return 返回影响数据库的记录数
- */
- int deleteMore(@Param("ids") String ids);
SpecialSQLMapper.xml 配置文件:
-
- <delete id="deleteMore" >
- delete from t_user where id in(${ids})
- delete>
测试:
- @Test
- public void deleteMore() {
- int i = mapper.deleteMore("16,17");
- System.out.println(i); // 2
- }
结果:
SpecialSQLMapper 接口:
- /**
- * 动态设置表名,查询所有的用户信息
- * @param tableName 要查询的表名称
- * @return 返回所查询的表记录
- */
- List
getAllUser(@Param("tableName") String tableName);
SpecialSQLMapper.xml 配置文件:
-
- <select id="getAllUser" resultType="user">
- select * from ${tableName}
- select>
测试:
- @Test
- public void getAllUser() {
- List
t_user = mapper.getAllUser("t_user"); - t_user.forEach(System.out::println);
- // User{id=1, username='张三', password='123456', age=19, gender='男', email='123456@qq.com'}
- // User{id=3, username='李四', password='123', age=19, gender='男', email='123456@qq.com'}
- // User{id=13, username='王五', password='321', age=23, gender='女', email='321@qq.com'}
- // User{id=14, username='赵六', password='123456', age=null, gender='男', email='null'}
- // User{id=15, username='admin', password='admin', age=20, gender='女', email='admin@qq.com'}
- }
需求:获取当前添加记录的主键值
SpecialSQLMapper 接口:
- /**
- * 添加用户信息
- * @param user 要添加的用户
- * @return 返回影响数据库的记录数
- */
- int insertUser(User user);
SpecialSQLMapper.xml 配置文件:
-
-
- <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
- insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email})
- insert>
测试:
- @Test
- public void insertUser() {
- User user = new User(null, "xiaoming", "654321", 23, "男", "xiaoming@qq.com");
- mapper.insertUser(user);
- System.out.println(user);
- }
结果:
注意:
useGeneratedKeys:设置使用自增的主键
keyProperty:因为增删改有统一的返回值是受影响的行数,
因此只能将获取的自增的主键放在传输的参数user对象的某个属性中