0、注意
- 增删改都要提交事务,不然写的sql语句不能生效
- 增删改的在xml中都有对应的标签,不要用成 select 标签(但个人不小心用错了好像一样而可以执行?最好还是用对应的标签吧)
- sql语句中用#{}来取值
- 注意注释
1、插入(insert)
首先在之前定义的userDao接口中定义一个方法,插入需要传入一个用户对象作为参数
//插入一个用户
void insertUser(User user);
然后在绑定的userMapper.xml文件中“实现”这个方法,编写sql语句,注意这里参数类型为User
<insert id="insertUser" parameterType="com.wt.pojo.User">
<!--若传入的参数是个对象,获取对象中的属性值直接通过#{属性名}就能得到-->
insert into mybatis.user(id,name,pwd) values (#{id},#{name},#{pwd});
</insert>
最后去测试一下
@Test
public void insertTest00(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
mapper.insertUser(new User(4,"Jeny","222222"));
//注意,在进行增删改操作时必须要用到事务,如果这里不提交,那么代码运行没有问题但表并没有被增删改,需要提交事务后才能实现增删改
sqlSession.commit();
sqlSession.close();
}
2、修改(update)
在接口中定义方法
//修改一个用户
void updateUser(User user);
通过绑定的mapper配置文件“实现”这个方法
<update id="updateUser" parameterType="com.wt.pojo.User">
<!--一样,对象中的属性值用#{}取-->
update mybatis.user set pwd=#{pwd} where id=#{id};
</update>
再测试
@Test
public void updateTest00(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
mapper.updateUser(new User(3,"Joe","123123"));
sqlSession.commit();
sqlSession.close();
}
3、删除(delete)
在接口中定义方法
//删除一个用户
void deleteUser(int id);
通过绑定的mapper配置文件“实现”这个方法
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where id = #{id};
</delete>
再测试
@Test
public void deleteTest00(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
mapper.deleteUser(3);
sqlSession.commit();
sqlSession.close();
}
4、查询(select)
根据id查询一个用户,依然是
在接口中定义方法
//根据id查询用户
User getUserById(int id);
通过绑定的mapper配置文件“实现”这个方法
<!--传入参数,要设置parameterType-->
<select id="getUserById" parameterType="int" resultType="com.wt.pojo.User">
<!--获取传入的参数用取值符号#{形参名}-->
select * from mybatis.user where id=#{id};
</select>
再测试
@Test
public void selectTest01(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
//传入参数
User userById = mapper.getUserById(2);
System.out.println(userById.getId());
System.out.println(userById.getName());
sqlSession.close();
}
模糊查询:
//模糊查询
List<User> getUsers(String value);
注意下面的字符串拼接
<select id="getUsers" parameterType="String" resultType="com.wt.pojo.User">
<!--注意这里的字符串拼接-->
select * from mybatis.user where name like "%"#{value}"%";
</select>
@Test
public void selectTest02(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> users = mapper.getUsers("T");
for(User user:users){
System.out.println(user.getName());
}
sqlSession.close();
}
5、后言
关于传入参数,有一个map可以用(万能的map),可以自由的传入参数而不用把一整个对象传入。这个后面会再写。增删改查也可以用注解来实现,虽然可以让代码变得更加简洁,但面对复杂的sql语句就不太行,我个人更喜欢用配置文件。