个人笔记向:mapper的写法

72 阅读1分钟

mybatis

配置文件

<?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>
​
    <settings>
        <!--在控制台输出发送的sql日志-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
​
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
​
            <!--目前只关注这部分内容,它的作用就是声明要连接的数据信息-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
​
    <mappers>
        <!--声明含有sql的接口所在包-->
        <package name="com.itheima.mapper"/>
    </mappers>
</configuration>

Mapper

// 1. 这是一个接口
// 2. 接口名:操作的表名+Mapper
public interface UserMapper {
​
    // #{}里面的内容
    // 1. 如果参数是对象类型,#{}写的是对象的属性名
    @Insert("insert into user values (null,#{name},#{age},#{gender},#{phone})")
    void save(User user);
​
    // @Options
    // useGeneratedKeys 拿到自增主键
    // keyProperty 指定哪个字段是主键
    @Options(useGeneratedKeys = true, keyProperty = "id")
    @Insert("insert into user values (null,#{name},#{age},#{gender},#{phone})")
    void save2(User user);
​
    @Update("update user set name = #{name},age=#{age},gender=#{gender},phone = #{phone} where id=#{id} ")
    void update(User user);
​
    @Delete("delete from user where id = #{id}")
    void delete(Integer id);
​
​
    @Delete("delete from user where name = #{name}")
    void deleteByName1(String name);
​
    @Delete("delete from user where name = ${name}")
    void deleteByName2(String name);
}
​

测试类

public class UserMapperTest {
    @Test
    public void testSave() throws IOException {
        // 1. 创建对象
        User user = new User();
        user.setName("张三");
        user.setAge(18);
        user.setGender(1);
        user.setPhone("15515847153");
​
        // 工具类获取sqlSession
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
​
        // 获取UserMapper对象,调用方法
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.save(user);
​
        // 工具类关闭sqlSession
        MyBatisUtil.close(sqlSession);
    }
​
​
    @Test
    public void testDeleteByName1() {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
​
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.deleteByName1("张三");
        // delete from user where name = '张三'
​
        MyBatisUtil.close(sqlSession);
    }
​
    @Test
    public void testDeleteByName2() {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
​
        // 用户名叫作:'李四' or id>1
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.deleteByName2(" '李四' or id>1"); // ${}会产生sql注入问题
        // delete from user where name = '李四' or id>1
​
        MyBatisUtil.close(sqlSession);
    }
}
​