1、namespace
- 将上边案例中的UserMapper接口改名为UserDao
- 将UserMapper.xml中的namespace改为UserDao的路径
- 再次测试
结论:
配置文件中的namespace中的名称为对应Mapper接口或者Dao接口的完整包,必须一致!
2、select
select标签是mybatis中最常用的标签之一
select语言有很多属性可以详细适配每一条sql语句
id命名空间中唯一的标识符,接口中的方法与映射文件中的sql语句id一一对应
parameterType传入SQL语句的参考类型【万能的Map,可以多尝试使用】
resultType Sql语句返回值类型。【完整的类名或者别名】
需求:根据id查询用户
- 在UserMapper中添加对应方法
public interface UserMapper { //查询全部用户 List<User> selectUser(); //根据id查询用户 User selectUserById(int id); }
在UserMapper.xml中添加Select语句
<select id="selectUserById" resultType="com.zang.pojo.User"> select * from user where id = #{id} </select>
- 测试类中测试
@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(); }
3、insert
我们一般使用insert标签进行插入操作,他的配置和select标签差不多
需求:给数据库增加一个用户
- 在UserMapper接口中添加对应的方法
//添加一个用户 int addUser(User user);
- 在UserMapper.xml中添加insert语句
<insert id="addUser" parameterType="com.zang.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(); }
增删改操作必须提交事务!!!
增删改操作必须提交事务!!!
增删改操作必须提交事务!!!
4、update
我们一般使用update标签进行更新操作,它的配置和select标签差不多
需求:修改用户的信息
- 编写接口方法
//修改一个用户 int updateUser(User user);
2.编写对应的配置文件SQL
<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(); }
5、delete
我们一般使用delete标签进行删除操作,它的配置和select标签差不多!
需求:根据id删除一个用户
- 编写接口方法
//根据id删除用户 int deleteUser(int id);
- 编写对应的配置文件SQL
<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(); }
6、思考
模糊查询like语句该怎么写?
- 在Java代码中添加通配符
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>