Mybatis的CRUD操作
0. 名词说明
1.namespace
namespace中的包名要和Dao/Mapper接口名一致
2.select
id:命名空间中唯一的标识符,接口中的方法名与映射文件中的SQL语句ID一一对应
resultType:SQL语句返回值类型。【万能的Map】
parameterType:传入SQL语句返回值类型【完整的类名或者别名】
1.Mybatis增删改查的基本实现
0.select 查
0. 编写mybatis-config.xml文件连接数据库
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <environments default="development"> 7 <environment id="development"> 8 <transactionManager type="JDBC"/> 9 <dataSource type="POOLED"> 10 <property name="driver" value="com.mysql.cj.jdbc.Driver"/> 11 <property name="url" 12 value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8&useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> 13 <property name="username" value="root"/> 14 <property name="password" value="root"/> 15 </dataSource> 16 </environment> 17 </environments> 18 <mappers> 19 <mapper resource="com/dz/dao/UserMapper.xml" /> 20 </mappers> 21 22 </configuration>
1.在UserMapper接口中添加对应方法
1 public interface UserMapper { 2 //查询全部用户 3 List<User> getUserList(); 4 //根据id查询用户 5 User getUserById(Integer id); 6 }
2.在UserMapper.xml中添加select语句
1 <mapper namespace="com.dz.dao.UserMapper"> 2 <!-- 返回值类型为:全限定类名--> 3 <select id="getUserList" resultType="com.dz.pojo.User"> 4 select * from mybatis.user 5 </select> 6 <select id="getUserById" resultType="com.dz.pojo.User" parameterType="int"> 7 select * from mybatis.user where id=#{id} 8 </select> 9 </mapper>
3.测试类中测试
1 @Test 2 public void getUserById(){ 3 //获取SqlSession连接 4 SqlSession sqlSession = MybatisUtils.getSqlSession(); 5 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 6 User user = userMapper.getUserById(1); 7 System.out.println(user); 8 sqlSession.close(); 9 }
1.insert 增
步骤与select标签差不多:
1.编写接口
1 Integer addUser(User user);
2. 编写对应UserMapper.xml中的sql语句
1 <insert id="addUser" parameterType="com.dz.pojo.User"> 2 insert into mybatis.user id,name,pwd values (#{id},#{name},#{pwd}); 3 </insert>
3. 测试
1 @Test 2 public void addUser(){ 3 SqlSession sqlSession =MybatisUtils.getSqlSession(); 4 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 5 int res = userMapper.addUser(new User(4,"dz","1213")); 6 if(res>0){ 7 System.out.println("添加成功"); 8 } 9 //提交事务 10 sqlSession.commit(); 11 sqlSession.close(); 12 }
注:增删改需要提交事务
2.delete 删
1.编写接口
1 Integer deleteUser(Integer id);
2.编写对应的sql语句
1 <delete id="deleteUser" parameterType="int"> 2 delete from mybatis.user where id=#{id} 3 </delete>
3. 测试
1 public void deleteUser(){ 2 SqlSession sqlSession =MybatisUtils.getSqlSession(); 3 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 4 userMapper.deleteUser(4); 5 sqlSession.commit(); 6 sqlSession.close(); 7 }
3.万能的Map(问题)
题:根据密码和用户名查询用户
1.在接口方法中,参数直接传递Map
1 public interface UserMapper { 2 User getUserById2(Map<String,Object> map); 3 }
2.编写sql语句的时候,需要传递参数类型,参数类型为map
1 <select id="getUserById2" resultType="com.dz.pojo.User" parameterType="map"> 2 select * from user where name=#{username} and pwd=#{pwd} 3 </select>
3.使用方法的时候,Map的key为sql中驱动值即可,没有顺序要求
1 @Test 2 public void selectUserById2(){ 3 SqlSession sqlSession = MybatisUtils.getSqlSession(); 4 UserMapper mapper = sqlSession.getMapper(UserMapper.class); 5 Map<String, Object> map = new HashMap<String,Object>(); 6 map.put("username","张三"); 7 map.put("pwd","12345"); 8 User user = mapper.getUserById2(map); 9 sqlSession.close(); 10 }