mybatis (二) CRUD 操作

mybatis (二) CRUD 操作

所有操作的步骤就是 在mapper接口中写方法,在对应的xml中填写 相应的语句 或者使用注解来实现

1.增加

1.1 在接口中编写方法

/**
 * 添加一个用户
 *
 * @param userK
 * @return int
 * @author 小小的梦想丶
 * @date 2020/09/17 19:55:13
 */
int addUser(UserK userK)

1.2 使用注解或者xml配置写sql

<insert id="addUser">
    insert into mybatis.user_k values (id=#{id,jdbcType=INTEGER},
    name=#{name,jdbcType=VARCHAR},pwd=#{pwd,jdbcType=VARCHAR})
</insert>

其中需要注意的点是 id 需要和接口中方法的名字对应

1.3 测试

SqlSession sqlSession = MybatisUtil.getSqlSession();
    UserKMapper mapper = sqlSession.getMapper(UserKMapper.class);
    //因为 id 在数据库设计的是自增 所以 这里写null
    UserK userK = new UserK(null, "haha", "haha");
    int i = mapper.addUser(userK);
    System.out.println(i);

2.删除

2.1 编写接口

int deleteUserK(Integer id);

2.2通过注解 编写sql

@Delete("delete from mybatis.user_k uk where id=#{id} ")

2.3测试

int i = mapper.deleteUserK(1);

3.改

3.1编写接口

int updateUserK(UserK1 userK1);

3.2 编写xml配置

<update id="updateUserK">
    update mybatis.user_k
    set pwd = #{pwd}
    where id=#{id};
</update>			

3.3测试

UserK1 userK1 = new UserK1(3, null, "123456");
    mapper.updateUserK(userK1);

4.查询

4.1 编写接口

/**
 * 查询所有的用户
 *
 * @param
 * @return java.util.List<com.qlx.pojo.UserK1>
 * @author 小小的梦想丶
 * @date 2020/09/18 10:41:10
 */
@Select("select * from mybatis.user_k uk ")
List<UserK1> queryAllUserK1();

/**
 * 根据id  来查用户信息
 *
 * @param id
 * @return com.qlx.pojo.UserK1
 * @author 小小的梦想丶
 * @date 2020/09/18 10:55:49
 */
UserK1 getUserK1ById(Integer id);

4.2 编写xxxMapper.xml 或者使用注解

其中 查询所有的用户我们使用注解根据 id 查询用户我们使用xml配置的方式来使用

<select id="getUserK1ById" resultType="com.qlx.pojo.UserK1">
    select * from mybatis.user_k uk where id=#{id}
</select>

4.3 测试demo

public class demo {
    //这里通过工具类  获取sqlSession 
SqlSession sqlSession = MyBatisUtils1.getSqlSession();
UserK1Mapper mapper = sqlSession.getMapper(UserK1Mapper.class);

@Test
public void testQueryAllUserK1() {
    List<UserK1> userK1s = mapper.queryAllUserK1();
    userK1s.forEach(System.out::println);
}

@Test
public void testGetUserK1ById() {
    UserK1 userK1ById = mapper.getUserK1ById(1);
    System.out.println(userK1ById);
}
}

我们可以通过日志 来 查看 执行的sql语句 和结果

//这是查询所有用户的信息的结果
Opening JDBC Connection
Created connection 1847637306.
==>  Preparing: select * from mybatis.user_k uk
==> Parameters: 
<==    Columns: id, name, pwd
<==        Row: 1, 张三, 123456
<==        Row: 2, 李四, 123456
<==        Row: 3, 哈哈, 78954
<==      Total: 3
UserK1(id=1, name=张三, pwd=123456)
UserK1(id=2, name=李四, pwd=123456)
UserK1(id=3, name=哈哈, pwd=78954)
//这是根据查询用户信息的结果
Opening JDBC Connection
Created connection 22600334.
==>  Preparing: select * from mybatis.user_k uk where id=?
==> Parameters: 1(Integer)
<==    Columns: id, name, pwd
<==        Row: 1, 张三, 123456
<==      Total: 1
UserK1(id=1, name=张三, pwd=123456)

5. Map

在插入一个用户的时候 insert into mybatis.user_k(id, name, pwd) VALUES (id=#{id},name=#{name},pwd=#{pwd}) 其中有很多的的字段,如果字段太多我们也不可能都写出来, 解决办法就是使用Map 来解决

5.1 编写接口

  int addUserK2(Map<String, Object> map);

5.2 编写 xml

<!--因为  #{这里的字段可以随便起名字  不必要和实体类和数据库中的一致}-->
<insert id="addUserK2" parameterType="map">
    insert into mybatis.user_k(id,name, pwd) VALUES (id=#{userkid},name=#{userkname},pwd=#{userkpwd})
</insert>

5.3测试

@Test
public void testAddUserK2() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("id", 16);
    map.put("userkname", "userkname");
    map.put("userkpwd", "userkpwd");
    int i = mapper.addUserK2(map);
    System.out.println(i);
}

Map传递参数,直接在sql中取出key即可 parameterType=“map”

对象传递参数,直接在sql中取对象的属性即可 parameterType=“Object”

只有一个基本数据类型的情况下,可以直接在sql中取到

6.模糊查询

6.1 第一种

/**
 * 查询所有姓李的
 *
 * @param
 * @return java.util.List<com.qlx.pojo.UserK1>
 * @author 小小的梦想丶
 * @date 2020/09/18 21:05:41
 */
List<UserK1> queryUserkLike(String value);
<select id="queryUserkLike" resultType="com.qlx.pojo.UserK1">
    select *
    from mybatis.user_k uk
    where name like #{value}
</select>

在测试的时候 我们通过 手动 拼接 %李% 也可以查询出来

@Test
public void testQueryUserKLike() {
    List<UserK1> userK1s = mapper.queryUserkLike("%李%");
    userK1s.forEach(System.out::println);
}

查询结果:

Opening JDBC Connection
Created connection 1021436681.
==>  Preparing: select * from mybatis.user_k uk where name like ?
==> Parameters: %李%(String)
<==    Columns: id, name, pwd
<==        Row: 2, 李四, 123456
<==        Row: 4, 李五, null
<==      Total: 2
UserK1(id=2, name=李四, pwd=123456)
UserK1(id=4, name=李五, pwd=null)

6.2 第二种方法

 List<UserK1> queryUserkLike2(String value);
<select id="queryUserkLike2" resultType="com.qlx.pojo.UserK1">
    select *
    from mybatis.user_k
    where user_k.name like "%"#{value}"%"
</select>
@Test
public void testQueryUserKLike2() {
    List<UserK1> userK1s = mapper.queryUserkLike2("李");
    userK1s.forEach(System.out::println);
}

同样可以得到 相同的结果 ,但是可能存在 sql 注入的问题

原文地址:https://www.cnblogs.com/lxsfve/p/13693587.html