1、配置文件完成增删改查
1.1、查询用户
select 元素属性 | 作用 |
---|---|
id | 方法名,必须与接口中方法名相同 |
parameterType | 方法参数的类型,可以省略 |
resultType | 方法的返回值类型,如果返回集合,可以直接写对象 |
#{变量名} | 先使用?占位,后续将具体值赋值给? |
${变量名} | 字符串拼接。会存在 SQL 注入问题 |
根据 ID 查询用户
-
在接口中添加方法
//2、根据id查询用户信息
User selectById(int id); -
在接口映射文件 UserMapper.xml 配置 SQL 语句
<select id="selectById" resultType="User">
select * from user where id = #{id};
</select> -
执行方法
@Test
public void test02() throws IOException {
//测试框架搭建情况
//1、标记mybatis的配置环境
String resource = "mybatis-config.xml";
//2、加载配置环境的信息
InputStream inputStream = Resources.getResourceAsStream(resource);
//3、根据配置信息,生成SqlSessionFactory对象,相当于连接池
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//4、从连接池获取连接
SqlSession sqlSession = sqlSessionFactory.openSession();
//5、获取执行sql语句的对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//6、调用方法执行sql语句
User user = mapper.selectById(1);
sqlSession.close();
System.out.println(user);
}
1.2、删除用户
根据 ID 删除用户
-
在接口中添加方法
//3、根据id删除用户
void deleteById(int id); -
在接口映射文件 UserMapper.xml 配置 SQL 语句
<delete id="deleteById" >
delete from user where id = #{id};
</delete> -
执行方法
@Test
public void test03() throws IOException {
//测试框架搭建情况
//1、标记mybatis的配置环境
String resource = "mybatis-config.xml";
//2、加载配置环境的信息
InputStream inputStream = Resources.getResourceAsStream(resource);
//3、根据配置信息,生成SqlSessionFactory对象,相当于连接池
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//4、从连接池获取连接
SqlSession sqlSession = sqlSessionFactory.openSession();
//5、获取执行sql语句的对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//6、调用方法执行sql语句
mapper.deleteById(3);
//7、提交事务
sqlSession.commit();
sqlSession.close();
}注意:需要提交事务
1.3、修改用户内容
修改用户信息
-
在接口中添加方法
void updateUser(User user);
-
在接口映射文件 UserMapper.xml 配置 SQL 语句
<update id="updateUser">
update user set username = #{username}, birthday = #{birthday},
sex = #{sex}, address = #{address} where id = #{id};
</update> -
执行方法
@Test
public void test04() throws IOException {
//测试框架搭建情况
//1、标记mybatis的配置环境
String resource = "mybatis-config.xml";
//2、加载配置环境的信息
InputStream inputStream = Resources.getResourceAsStream(resource);
//3、根据配置信息,生成SqlSessionFactory对象,相当于连接池
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//4、从连接池获取连接
SqlSession sqlSession = sqlSessionFactory.openSession();
//5、获取执行sql语句的对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//6、创建user对象
User user = new User(1, "小林", Date.valueOf("2002-1-1"), "男", "北京");
//7、调用执行方法
mapper.updateUser(user);
//8、提交事务
sqlSession.commit();
sqlSession.close();
}
1.4、添加用户
属性 | 说明 |
---|---|
useGeneratedKeys | true,使用 mysql 生成的主键,获取数据库返回的主键值 |
keyProperty | 实体类中对应的属性 |
添加用户信息
-
在接口中添加方法
//4、添加数据
void addUser(User user); -
在接口映射文件 UserMapper.xml 配置 SQL 语句
<insert id="addUser" useGeneratedKeys="true" keyProperty="id">
insert into user values (null,#{username},#{birthday},#{sex},#{address});
</insert> -
执行方法
@Test
public void test5() throws IOException {
//测试框架搭建情况
//1、标记mybatis的配置环境
String resource = "mybatis-config.xml";
//2、加载配置环境的信息
InputStream inputStream = Resources.getResourceAsStream(resource);
//3、根据配置信息,生成SqlSessionFactory对象,相当于连接池
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//4、从连接池获取连接
SqlSession sqlSession = sqlSessionFactory.openSession();
//5、获取执行sql语句的对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//6、创建user对象
User user = new User(null, "小吴", Date.valueOf("2002-1-1"), "男", "北京");
//7、调用执行方法
mapper.addUser(user);
//返回自增的主键提供给后续操作,比如注册后的自动登录场景
System.out.println(user.getId());
//8、提交事务
sqlSession.commit();
sqlSession.close();
}
2、多参数查询
多参数查询需要注意的问题
假设我们要名字进行模糊查询,同时确定性别,在 UserMapper.xml 文件中编写 SQL 语句
<select id="selectByUser" resultType="User">
select * from user where username like #{username} and sex = #{sex};
</select>
当我们进行测试的时候,会发现报错
Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [arg1, arg0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [arg1, arg0, param1, param2]
这是因为 mybatis 在多参数条件的时候,默认只按照两种传参方式
-
arg0,arg1 -
param1,param2,param3
所以需要把 xml 文件改为
<select id="selectByUser" resultType="User">
select * from user where username like #{arg0} and sex = #{arg1};
</select>
mybatis 也为我们提供了一些自定义方案
-
散装参数:如果方法中有多个参数,需要使用@Param(“SQL 参数占位符名称”)
在对应接口添加注解
//5、多参数查询
List<User> selectByUser(@Param("username") String username, @Param("sex") String sex);当然,使用这种方法,注解里面的内容要和 xml 文件一致
<select id="selectByUser" resultType="User">
select * from user where username like #{username} and sex = #{sex};
</select> -
对象参数:对象的属性名称要和参数占位符名称一致
把要作为参数的占位符封装成对象传进去
接口接收对象
List<User> selectByUser(User user);
测试方法直接传输对象
User newUser = new User();
newUser.setUsername("%林%");
newUser.setSex("男");
List<User> users = mapper.selectByUser(newUser);
sqlSession.close();
for (User user : users) {
System.out.println(user);
} -
Map 集合参数:Map 的键要和占位符名称一致
接口中编写
List<User> selectByUser(Map<String,Object> map);
测试类中传入
Map<String, Object> map = new HashMap<>();
map.put("username","%林%");
map.put("sex","男");
List<User> users = mapper.selectByUser(map);一样的这边的键需要与 xml 文件中的占位符名称相同
原文始发于微信公众号(小林学编程):Java:MyBatis实现增删改查
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/219359.html