MyBatis的CRUD
- 查询
单个参数绑定
有序参数绑定
注解参数绑定
对象参数绑定
模糊查询
聚合函数查询 - 添加
- 删除
- 修改
1 查询
1.1 单个参数绑定
什么意思呢,当你查询单表需要查询固定的某条数据就是单个参数
操作如下
①test文件夹下编写对应的测试代码
②在UserMapper类中写出方法
③在UserMapper.xml文件写对应的sql语句
test文件夹下的测试类代码
/*测试单参数绑定*/
@Test
public void findUserById(){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findUserById(51);
System.out.println(user);
}
UserMapper接口代码如下
User findUserById(Integer id);
UserMapper.xml配置文件代码如下
<!--单个参数绑定-->
<!--parameterType:形参是何类型-->
<select id="findUserById" parameterType="java.lang.Integer" resultType="user">
SELECT * FROM user WHERE id = #{id}
</select>
1.2 有序参数绑定
简单来说,查询条件不止一个,并且实参的顺序不可以更换
步骤
① test文件夹下先写出调用方法
②在UserMapper中写接口
③在UserMapper.xml文件中写SQL语句
test的代码如下
/*测试有序参数绑定*/
@Test
public void findUserByIdAndName(){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findUserByIdAndName(51,"一坤年的偶像练习生");
System.out.println(user);
}
UserMapper接口代码如下
User findUserByIdAndName(Integer id, String name);
UserMapper.xml配置文件代码如下,我在这里做了各个组件的详细介绍,可看代码理解
<!--有序参数绑定-->
<!--不止一个参数,传参类型不固定就不写 resultType 将返回的数据装到哪儿-->
<!--同时有序参数绑定需要注意的是
形参这里不能用昵称 需要使用arg param
arg以索引为准则,第一个形参为arg0
param为正常顺序 第一个形参为param1
-->
<select id="findUserByIdAndName" resultType="user">
SELECT * FROM user WHERE id = #{arg0} AND username = #{arg1}
</select>
1.3 注解传参
注解传参,我们使用@Param进行注解,这样可以解决有序传参中参数位置不可调换的问题,但是需要注意的是,注解名需要和形参名保持一致
步骤
① test文件夹下先写出调用方法
②在UserMapper中写接口
③在UserMapper.xml文件中写SQL语句
test代码如下
/*测试注解参数绑定*/
@Test
public void findUserByIdAndName2(){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findUserByIdAndName2(51,"一坤年的偶像练习生");
System.out.println(user);
}
UserMapper代码如下
User findUserByIdAndName2(@Param("id") Integer id , @Param("username") String username);
UserMapper.xml代码如下
<!--注解参数绑定-->
<!--注解参数绑定参数位置可以不按顺序-->
<select id="findUserByIdAndName2" resultType="user">
SELECT * FROM user WHERE username = #{username} AND id =#{id}
</select>
1.4 对象参数绑定
我们在查询多条属性的时候可能会有多个需求,使用对象来传参会比较方便
步骤
① test文件夹下先写出调用方法
②在UserMapper中写接口
③在UserMapper.xml文件中写SQL语句
test代码如下
/*测试对象传参绑定*/
@Test
public void findUserPojo(){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User userParam = new User();
userParam.setId(51);
userParam.setUsername("一坤年的偶像练习生");
User user = userMapper.findUserPojo(userParam);
System.out.println(user);
}
UserMapper代码如下
User findUserPojo(User userParam);
UserMapper.xml代码如下
<!--对象参数绑定-->
<!--对象传参 我们有参数类型 所有需要填写parameterType类型
形参依旧是id username 跟实体类保持一致即可
-->
<select id="findUserPojo" parameterType="user" resultType="user">
SELECT * FROM user WHERE id = #{id} AND username = #{username}
</select>
1.5 Map参数绑定
Map参数绑定利用Map数组进行传参,它实现效果与对象传参一致,根据喜好自行选择
步骤
① test文件夹下先写出调用方法
②在UserMapper中写接口
③在UserMapper.xml文件中写SQL语句
test代码如下
/*测试map传参绑定*/
@Test
public void findUserMap(){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
HashMap<Object, Object> map = new HashMap<>();
map.put("id",51);
map.put("username","一坤年的偶像练习生");
User user = userMapper.findUserMap(map);
System.out.println(user);
}
UserMapper接口代码如下
User findUserMap(HashMap<Object, Object> map);
UserMapper.xml配置文件代码如下
<!--map参数绑定
map参数绑定中,我们利用map集合传参,有传参类型
-->
<select id="findUserMap" parameterType="java.util.Map" resultType="user">
SELECT * FROM user WHERE id = #{id} AND username = #{username}
</select>
1.6 模糊查询
根据输入内容,查出含输入内容的所有信息
步骤
① test文件夹下先写出调用方法
②在UserMapper中写接口
③在UserMapper.xml文件中写SQL语句
test代码如下
/*测试模糊查询*/
@Test
public void findUserLikeName(){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.findUserLikeName("张");
for (User user : userList) {
System.out.println(user);
}
}
UserMapper接口类代码如下
List<User> findUserLikeName(String username);
UserMapper.xml配置文件代码如下
<!--模糊查询-->
<select id="findUserLikeName" parameterType="java.lang.String" resultType="user">
<!--写法一 利用concat()来实现-->
<!--
SELECT * FROM user WHERE username LIKE concat('%',#{username},'%')
-->
<!--写法二 利用${}来拼接实现模糊查询-->
SELECT * FROM user WHERE username LIKE '%${username}%'
</select>
1.7 聚合查询
查询聚合函数
步骤
① test文件夹下先写出调用方法
②在UserMapper中写接口
③在UserMapper.xml文件中写SQL语句
test文件夹代码如下
/*测试聚合函数*/
@Test
public void testAccount(){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer account = userMapper.getAccount();
System.out.println("总共有"+account+"条数据");
}
UserMapper接口代码如下
Integer getAccount();
UserMapper.xml配置文件代码如下
<!--
聚合查询
聚合函数返回值类型为int
-->
<select id="getAccount" resultType="java.lang.Integer">
SELECT COUNT(1) FROM user
</select>
2 添加
步骤
①test测试类中写测试方法
②UserMapper接口中写方法
③UserMapper.xml配置文件中写sql语句以及相关配置代码
test代码如下
/*测试添加*/
@Test
public void testInsertUser(){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setUsername("旋转陀螺嘎嘎转");
user.setPassword("111");
user.setSex("男");
user.setBirthday(new Date());
user.setAddress("绝育路");
userMapper.insertUser(user);
//提交 默认为回滚事务,无法添加到数据库中
sqlSession.commit();
System.out.println(user.getId());
}
UserMapper接口的代码如下
void insertUser(User user);
UserMapper.xml配置文件代码如下
<!--添加语句-->
<!--添加无返回值-->
<!--方法二-->
<insert id="insertUser" parameterType="user" useGeneratedKeys="true" keyProperty="id">
<!--
获得自动增长的id值,有两种方法
-->
<!--方法一-->
<!--
order 是指在添加完成之后还是添加完成之前
keyProperty:指的获得什么字段
resultType 老熟人,返回值的类型
<selectKey order="AFTER" keyProperty="id" resultType="java.lang.Integer">
SELECT last_insert_id()
</selectKey>
-->
INSERT INTO user(username,password,sex,birthday,address)
VALUES(#{username},#{password},#{sex},#{birthday},#{address})
</insert>
3 删除
将数据从数据库中移除
步骤
①test测试类中写测试方法
②UserMapper接口中写方法
③UserMapper.xml配置文件中写sql语句以及相关配置代码
test测试类中代码如下
/*测试删除*/
@Test
public void delUserById(){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.DelUserById(56);
//数据提交
sqlSession.commit();
}
UserMapper接口类方法如下:
void DelUserById(Integer id);
UserMapper.xml配置文件中代码如下
<!--删除、无返回值类型-->
<delete id="DelUserById" parameterType="java.lang.Integer">
DELETE FROM user WHERE id = #{id}
</delete>
4 修改
修改数据库中指定的数据
步骤
①test测试类中写测试方法
②UserMapper接口中写方法
③UserMapper.xml配置文件中写sql语句以及相关配置代码
test测试类中代码如下
/*测试修改*/
@Test
public void updateUserById(){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//实例化一个用户对象
User userParam = new User();
//更改用户数据
userParam.setId(50);
userParam.setUsername("喜羊羊");
userParam.setPassword("123");
userParam.setBirthday(new Date());
userParam.setSex("男");
userParam.setAddress("轻轻大草原");
userMapper.UpdateUserById(userParam);
sqlSession.commit();
}
UserMapper接口类方法如下:
void UpdateUserById(User userParam);
UserMapper.xml配置文件中代码如下
<!--修改 无返回值-->
<update id="UpdateUserById" parameterType="user">
UPDATE user SET username = #{username},password = #{password},birthday = #{birthday}
,sex = #{sex},address = #{address} WHERE id = #{id}
</update>
下课!