2、增删改查
增删改查,pom文件,工具类,实体类,核心配置文件都不用改,只需依次修改Mapper接口、接口的xml文件、测试类即可
编写xml文件的时候,需要在同一个下编写,不能存在多个mapper
1、查 —— select
首先,先修改mapper(dao)接口
package com.fu.dao;
import com.fu.pojo.User;
import java.util.List;
public interface UserDao {
User select(int id); //查找的时候,返回的结果是一个用户,方法名为select,参数是id,就是根据id来查询
}
然后,修改接口的xml文件
<mapper namespace="com.fu.dao.UserDao">
<select id="select" resultType="com.fu.pojo.User" parameterType="int">//id为方法名,resultType为返回值类型,parameterType为参数类型
select * from user where id = #{id}; <!--#{}相当于一个占位符,来接受输入的参数-->
</select>
</mapper>
最后修改测试类
public void test(){
SqlSession sqlSession = mybatisUtils.getSession();// 第一步:获取sqlsession对象(死的)
//执行sql
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = userDao.select(2); //方法名修改正确,参数填写需要查询的参数
System.out.println(user);
sqlSession.close();//关闭sqlsession (死的)
}
2、增 —— insert
首先,修改mapper接口
package com.fu.dao;
import com.fu.pojo.User;
import java.util.List;
public interface UserDao {
int insert(User user); //因为不需要返回值,所以它的类型为int,插入的是一条对象信息,所以他的参数是对象
}
然后,修改xml配置文件,
<insert id="insert" parameterType="com.fu.pojo.User">
insert into blog.user(id,name,age) value (#{id},#{name},#{age});
</insert>
</mapper>
最后修改测试类
@Test
public void insertTest(){
SqlSession sqlSession = mybatisUtils.getSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
userDao.insert(new User(6,"嘿嘿嘿",123));
sqlSession.commit();
sqlSession.close();
}
3、改 —— update
首先,修改mapper接口,创建修改方法
package com.fu.dao;
import com.fu.pojo.User;
import java.util.List;
public interface UserDao {
int updateUser(User user);
}
然后,修改xml配置文件
<mapper namespace="com.fu.dao.UserDao">
<update id="updateUser" parameterType="com.fu.pojo.User">
update blog.user set name = #{name}, age = #{age} where id = #{id} ;
</update>
</mapper>
最后修改测试类
@Test
public void UpdateTest(){
SqlSession sqlSession = mybatisUtils.getSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
userDao.updateUser(new User(7,"666",000));
sqlSession.commit();
sqlSession.close();
}
4、删 —— delete
首先,修改mapper接口,创建修改方法
package com.fu.dao;
import com.fu.pojo.User;
import java.util.List;
public interface UserDao {
int deleteUser(int id);
}
然后,修改xml配置文件
<delete id="deleteUser">
delete from blog.user where id = #{id};
</delete>
最后修改测试类
@Test
public void deleteTest(){
SqlSession sqlSession = mybatisUtils.getSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
userDao.deleteUser(1);
sqlSession.commit();
sqlSession.close();
}
5、错误排查
①、namespace要用.不能用/
②、标签别错了
③、resource用/不能用.
6、map作为参数
如果数据库中的字段过多,可以尝试用map来接收
首先,修改接口
package com.fu.dao;
import com.fu.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserDao {
int insertMap(Map<String,Object> map); //参数传入一个key为String类型,value为Object(任意)类型的map
}
然后,修改xml配置文件,绑定接口
<insert id="insertMap" parameterType="map">
insert into blog.user(id,name,age) value (#{UserId},#{UserName},#{UserAge});<!--这里的value对应的是map的key值-->
</insert>
最后修改测试类
public void insertMapTest(){
SqlSession sqlSession = mybatisUtils.getSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
Map<String,Object> map = new HashMap<String, Object>();//因为传入的是map,所以需要创建一个map对象
map.put("UserId",1); //然后对应的传入map的key-value对
map.put("UserName","我是第一");
map.put("UserAge",18);
userDao.insertMap(map); //传入map
sqlSession.commit();
sqlSession.close();
}
}
7、模糊查询
注意sql注入的问题
首先,先写接口
package com.fu.dao;
import com.fu.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserDao {
List<User> getUserLike(String name); //按照name模糊查询
}
然后,修改xml文件
<select id="getUserLike" resultType="com.fu.pojo.User"> <!--与普通查询一样-->
select * from blog.user where name like #{value} <!--value就是模糊查询的值-->
</select>
最后,写测试类
@Test
public void selectLikeTest() {
SqlSession sqlSession = mybatisUtils.getSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> list = userDao.getUserLike("%张%"); //占用位置的通配符用% ,模糊查询有很多结果,用list输出
for(User user : list){
System.out.println(user);
}
sqlSession.close();
}