3.MyBatis-CRUD操做

何为CRUD?正则表达式

  • 咱们一般称为增删改查sql

  • 增长(Create)、读取(Retrieve)、更新(Update)和删除(Delete)数据库

3.1 Select语句

第一步:编写接口session

 //查询方法
 List<User> fingAll() throws Exception;
 
 User findById(Integer id) throws Exception;

第二步:编写对应mapper中的sql语句mybatis

  • namespace就很少讲了命名空间就是接口对应包名,id就是对应的方法名app

  • 注意这里SQL语句的占位符#测试

 <!--resultType返回类型-->
 <select id="fingAll" resultType="User">
    select * from mybatis.user
 </select>
 
 <!--经过id查询一个user对象-->
 <select id="findById" parameterType="Integer" resultType="User">
    select * from user where id=#{id}
 </select>

第三步:测试atom

 @Test
 public void testFindAll() throws Exception {
     //获取SqlSession对象
     SqlSession session = MyBatisUtil.getSqlSession();
 
     //调用SqlSession的getMapper方法 传入接口字节码文件返回咱们的UserMapper对象
     UserMapper mapper = session.getMapper(UserMapper.class);
 
     //遍历集合
     List<User> users = mapper.fingAll();
     for (User user : users) {
         System.out.println(user);
    }
 
     //释放资源
     session.close();
 }
 
 @Test
 public void testFindById() throws Exception {
     //获取SqlSession对象
     SqlSession session = MyBatisUtil.getSqlSession();
 
     //调用SqlSession的getMapper方法 传入接口字节码文件返回咱们的UserMapper对象
     UserMapper mapper = session.getMapper(UserMapper.class);
 
     User user = mapper.findById(5);
     System.out.println(user);
     //释放资源
     session.close();
 }

 

 

3.2 Insert语句

第一步:编写接口spa

 //增长方法
 void addUser(User user) throws Exception;

第二步:编写mapper对应的sql语句对象

  • parameterType指的是参数类型

 <!--添加一个User对象-->
 <insert id="addUser" parameterType="User" >
    insert into user (name,email,phone,gender,password,age,create_time,update_time) values (#{name},#{email},#{phone},#{gender},#{password},#{age},#{create_time},#{update_time});
 </insert>

第三步:编写测试

  • 这里须要注意提交事务(不是查询都须要提交事务)

 @Test
 public void testAddUser() throws Exception {
 
     User user=new User();
     user.setName("杨堦深");
     user.setPhone("1111111111");
     user.setAge(18);
     user.setGender(1);
     user.setPassword("123");
     user.setEmail("1870136088@qq.com");
 
     //获取SqlSession对象
     SqlSession session = MyBatisUtil.getSqlSession();
 
     //调用SqlSession的getMapper方法 传入接口字节码文件返回咱们的UserMapper对象
     UserMapper mapper = session.getMapper(UserMapper.class);
     mapper.addUser(user);
     //提交事务
     session.commit();
     //释放资源
     session.close();
 }

 

3.3 Delete语句

第一步:编写接口

 //删除方法
 void deleteUser(Integer id) throws Exception;

第二步:编写mapper对应的SQL语句

 <!--删除一个User对象-->
 <delete id="deleteUser" parameterType="Integer">
    delete from user where id=#{id}
 </delete>

第三步:编写测试

  • 仍是提醒最易提交事务

 @Test
 public void testDeleteUser() throws Exception {
     //获取SqlSession对象
     SqlSession session = MyBatisUtil.getSqlSession();
 
     //调用SqlSession的getMapper方法 传入接口字节码文件返回咱们的UserMapper对象
     UserMapper mapper = session.getMapper(UserMapper.class);
 
     mapper.deleteUser(5);
 
     session.commit();
     //释放资源
     session.close();
 }

 

 

3.4 Update语句

第一步:编写接口

 //修改方法
 Integer updateUser(User user)throws Exception;

第二步:编写mapper对应的SQL语句

 <!--修改User字段-->
 <update id="updateUser" parameterType="User"  >
    update user set name=#{name},email=#{email},phone=#{phone},gender=#{gender},password={password},age=#{age},create_time=#{create_time},update_time=#{update_time} where id=#{id}
 </update>

第三步:编写测试

  • 仍是提醒最易提交事务

 @Test
 public void testUpdateUser() throws Exception {
     //获取SqlSession对象
     SqlSession session = MyBatisUtil.getSqlSession();
 
     //调用SqlSession的getMapper方法 传入接口字节码文件返回咱们的UserMapper对象
     UserMapper mapper = session.getMapper(UserMapper.class);
 
     Integer integer = mapper.updateUser(new User(6,"yanggoushen","5201414@qq.com","1515155111",1,"1111",38,null,null));
     System.out.println(integer);
 
     session.commit();
     //释放资源
     session.close();
 }

 

 

3.5 万能map

  • 何时用万能map? 为何要用万能map?

  • 当咱们实体类,或者数据库中表的字段过多,咱们就应当使用map

  • map在公司的开发中用的比较多

 

第一步:编写接口(咱们这里就直接用map)

 //增长方法
 void addUser2(Map<String,Object> map) throws Exception;

第二步:编写mapper对应的sql语句

  • 这里就给了三个字段

  • parameterType指定的是参数类型

  • 很明显用map咱们值能够自定义没有按照数据库或者实体类进行限定(也就是直接取出key就能够了)

 <!--添加一个User对象-->
 <insert id="addUser2" parameterType="map" >
    insert into user (name,age,email) values (#{isName},#{isAge},#{email});
 </insert>

第三步:编写测试

 @Test
 public void testAddUserMap() throws Exception {
     SqlSession sqlSession = MyBatisUtil.getSqlSession();
     UserMapper mapper = sqlSession.getMapper(UserMapper.class);
 
     Map<String,Object> map= new HashMap<String, Object>();
     map.put("isName","happyday");
     map.put("isAge",11);
     map.put("email","bjfbe@qq.com");
     mapper.addUser2(map);
 
     sqlSession.commit();
     sqlSession.close();
 }

 

 

3.6 模糊查询

  • 为何须要模糊查询?

  • 主要仍是当咱们不肯定某个数据的时候固然也能够查出数据库表中具备相同元素的字段

 

第一步:编写接口

 //模糊查询
 List<User> findUserLike(String value) throws Exception;

第二步:编写mapper对应的sql

  • 这里用到like关键字进行模糊查询

 <!--模糊查询user集合-->
 <select id="findUserLike"  resultType="User">
    select * from user where name like #{value}
 </select>

第三步:编写测试

  • 我这里是拿百分号(%)占位 也能够拿(_)下划线占位

  • 下划线是表示占一个位 百分号表示占0个或多个位

 @Test
 public void testFindUserLike() throws Exception {
     //获取SqlSession对象
     SqlSession session = MyBatisUtil.getSqlSession();
 
     //调用SqlSession的getMapper方法 传入接口字节码文件返回咱们的UserMapper对象
     UserMapper mapper = session.getMapper(UserMapper.class);
 
     //遍历集合
     List<User> users = mapper.findUserLike("%y%");
     for (User user : users) {
         System.out.println(user);
    }
     
     //释放资源
     session.close();
 }

固然也能够在sql语句中直接使用占位符写测试的时候就不用写了

 select * from user where name like "%"#{value}"%"

 

3.6.1 模糊查询经常使用的四种表示

  • %:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些状况下如果中文,请使用两个百 分号(%%)表示。

  • _: 表示任意单个字符。匹配单个任意字符,它经常使用来限制表达式的字符长度语句:

  • [ ]:表示括号内所列字符中的一个(相似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

 select * from user where realname like '[张蔡王]杰'
 查询出“张杰”,“蔡杰”,“王杰”(而不是“张蔡王杰”)
  • [^] :表示不在括号所列以内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符之外的任一个字符。

 select * from user where realname like '[^张蔡王]杰'
 查询出不姓“张”,“蔡”,“王”的“林杰”,“赵杰”等
相关文章
相关标签/搜索