atwood-pan

 

MyBatis02:CRUD操作

CRUD操作

namespace

这个是命名空间,不可缺少,更不能写错
配置文件中namespace中的名称为对应Mapper接口或者Dao接口的全限定类名,完整包名,必须一致!

Select(用于查询的标签)

根据id查询用户

1、 在UserMapper中添加对应方法

public interface UserMapper {
    //查询全部用户
    List<User> selectUser();
    //根据id查询用户
    User selectUserById(int id);
}

2、在UserMapper.xml中添加Select语句

<select id="selectUserById" resultType="com.pp.pojo.User">
	select * from user where id = #{id}
</select>

3、在测试类中测试

@Test
public void tsetSelectUserById() {
    SqlSession session = MybatisUtils.getSession();  //获取SqlSession连接
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = mapper.selectUserById(1);
    System.out.println(user);
    session.close();
}

根据密码 和 名字 查询用户

  1. 直接在方法中传递参数
    1、在接口方法的参数前加上@Param属性
    2、SQL语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型
//通过密码和名字查询用户
User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);

2.使用Map
1、在接口方法中,参数直接传递Map

User selectUserByNP2(Map<String,Object> map);

2、编写SQL语句的时候,需要传递阐述类型,参数类型为map

<select id="selectUserByNP2" parameterType="map" resultType="com.kuang.pojo.User">
  select * from user where name = #{username} and pwd = #{pwd}
</select>

3、测试的时候,Map的K为sql中取的值即可,没有任何顺序要求

Map<String, Object> map = new HashMap<String, Object>();
map.put("username","盼盼");
map.put("pwd","123456");
User user = mapper.selectUserByNP2(map);

像上面这种采取Map传参的适用于参数过多的情况,如果参数比较少,推荐采用直接传递参数

Insert(用于插入数据)

给数据库增加一个用户

1、在UserMapper接口中添加对应的方法

int addUser(User user);

2、在UserMapper.xml中编写insert语句

<insert id="addUser" parameterType="com.pp.pojo.User">
     insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>

3、编写测试类

@Test
public void testAddUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = new User(5,"王五","zxcvbn");
    int i = mapper.addUser(user);
    System.out.println(i);
    session.commit(); //提交事务,重点!不写的话不会提交到数据库
    //这里可以通过在创建工厂时,将open选项设为true即可实现自动提交事务
    session.close();
}

update(用于更新数据)

修改用户的信息

1、在UserMapper中编写接口方法


//修改一个用户
int updateUser(User user);

2、在UserMapper.xml中编写对应的sql

<update id="updateUser" parameterType="com.kuang.pojo.User">
    update user set name=#{name},pwd=#{pwd} where id = #{id}
</update>

3、测试

@Test
public void testUpdateUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = mapper.selectUserById(1);
    user.setPwd("asdfgh");
    int i = mapper.updateUser(user);
    System.out.println(i);
    session.commit(); //提交事务,重点!不写的话不会提交到数据库
    session.close();
}

delete(用于删除数据)

根据id删除一个用户

1、添加接口方法

//根据id删除用户
int deleteUser(int id);

2、在xml文件中编写sql

<delete id="deleteUser" parameterType="int">
    delete from user where id = #{id}
</delete>

3、测试

@Test
public void testDeleteUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    int i = mapper.deleteUser(5);
    System.out.println(i);
    session.commit(); //提交事务,重点!不写的话不会提交到数据库
    session.close();
}

总结

  1. 所有的增加、删除、修改操作,都需要提交事务,否则数据库的数据不会更新
  2. 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时
  3. 参数过多时,可以考虑使用map来进行传参
  4. 为了规范,在xml文件中编写sql时,我们尽量将Parameter参数和resultType都写上

模糊查询

1、在Java代码中添加sql通配符

string wildcardname =%smi%;
list<name> names = mapper.selectlike(wildcardname);
 
<select id=”selectlike”>
 select * from foo where bar like #{value}
</select>

2、在sql语句中拼接通配符,sql注入风险

string wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);
 
<select id=”selectlike”>
     select * from foo where bar like "%"#{value}"%"
</select>

posted on 2021-04-12 21:49  JavaCoderPan  阅读(9)  评论(0编辑  收藏  举报  来源

导航