文章目录
- 简单的CRUD(均在mapper.xml中使用)
- namespace
- select
- insert
- update
- delete
- 总结
- 模糊查询
简单的CRUD(均在mapper.xml中使用)
namespace
- 配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致!
- 可以简单理解,mapper.xml中的namespace属性值,对应Mapper接口
select
- select语句有很多属性可以详细配置每一条SQL语句
id
- 命名空间中唯一的标识符
- 接口中的方法名与映射文件中的SQL语句ID 一一对应
parameterType
- 传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】
resultType
- SQL语句返回值类型。【完整的类名或者别名】
- 一般是在返回值是简单类型时使用。与之对应的是
resultMap
测试:根据id查询用户
- 在Usermapper中添加方法
public interface UserMapper {
//查询全部用户
List<User> selectUser();
//根据id查询用户
User selectUserById(int id);
}
- UserMapper.xml实现具体sql
<select id="selectUserById" resultType="com.kuang.pojo.User">
select * from user where id = #{id}
</select>
增强一
- 在接口方法的参数前加
@Param
属性 - Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型
//通过密码和名字查询用户
User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);
/*
<select id="selectUserByNP" resultType="com.kuang.pojo.User">
select * from user where name = #{username} and pwd = #{pwd}
</select>
*/
增强二
- 在接口方法上,直接传递Map
User selectUserByNP2(Map<String,Object> map);
- 编写sql语句的时候,需要传递参数类型,参数类型为map
<select id="selectUserByNP2" parameterType="map" resultType="com.kuang.pojo.User">
select * from user where name = #{username} and pwd = #{pwd}
</select>
- 测试,在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求!
Map<String, Object> map = new HashMap<String, Object>();
map.put("username","小明");
map.put("pwd","123456");
User user = mapper.selectUserByNP2(map);
insert
- UserMapper中添加方法
//添加一个用户
int addUser(User user);
- 在UserMapper.xml中实现
<insert id="addUser" parameterType="com.kuang.pojo.User">
insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
- 测试
@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(); //提交事务,重点!不写的话不会提交到数据库
session.close();
}
注意点:
- 增,删,改是需要提交事务的!
update
//修改一个用户
int updateUser(User user);
<update id="updateUser" parameterType="com.kuang.pojo.User">
update user set name=#{name},pwd=#{pwd} where id = #{id}
</update>
@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删除用户
int deleteUser(int id);
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
@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();
}
总结
- 所有的增删改操作都需要提交事务!
- 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
- 有时候根据业务的需求,可以考虑使用map传递参数!
- 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!
模糊查询
方法一:在Java中添加sql通配符(较为安全)
string wildcardname = “%smi%”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like #{value}
</select>
方法二:在sql语句中进行拼接(可能sql注入)
string wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like "%"#{value}"%"
</select>