05_MyBatis基于注解的开发

简介:  要想开发基于注解的MyBatis应用。需要先写一个带有注解的接口。 PersonDao.java的写法如下: package com.rl.dao;   import java.util.List; import java.util.Map;   import org.apache.ibatis.anno

  1. 要想开发基于注解的MyBatis应用。需要先写一个带有注解的接口。

PersonDao.java的写法如下:

package com.rl.dao;

 

import java.util.List;

import java.util.Map;

 

import org.apache.ibatis.annotations.Delete;

import org.apache.ibatis.annotations.Insert;

import org.apache.ibatis.annotations.Result;

import org.apache.ibatis.annotations.ResultMap;

import org.apache.ibatis.annotations.Results;

import org.apache.ibatis.annotations.Select;

import org.apache.ibatis.annotations.SelectKey;

import org.apache.ibatis.annotations.SelectProvider;

import org.apache.ibatis.annotations.Update;

 

import com.rl.model1.Person;

import com.rl.util.SqlHelper;

 

public interface PersonDao {

        

         @Select("select * from person t where t.person_id = #{personId}")

         @Results(value={

                   @Result(column="person_id", property="personId", id=true),

                   @Result(column="name", property="name"),

                   @Result(column="gender", property="gender"),

                   @Result(column="person_addr", property="personAddr"),

                   @Result(column="birthday", property="birthday")

         })

         public Person selectPersonById(Integer personId);

        

         @Select("select * from person")

         @Results(value={

                   @Result(column="person_id", property="personId", id=true),

                   @Result(column="name", property="name"),

                   @Result(column="gender", property="gender"),

                   @Result(column="person_addr", property="personAddr"),

                   @Result(column="birthday", property="birthday")

         })

         public List<Person> selectPersonAll();

        

         @Select("select * from person t where t.gender = #{gender} and t.birthday < #{birthday}")

         @Results(value={

                   @Result(column="person_id", property="personId", id=true),

                   @Result(column="name", property="name"),

                   @Result(column="gender", property="gender"),

                   @Result(column="person_addr", property="personAddr"),

                   @Result(column="birthday", property="birthday")

         })

         public List<Person> selectPersonByParams(Map<String,Object> map);

        

        

         @Select("select * from person t where t.name like '%${name}%'")

         @Results(value={

                            @Result(column="person_id", property="personId", id=true),

                            @Result(column="name", property="name"),

                            @Result(column="gender", property="gender"),

                            @Result(column="person_addr", property="personAddr"),

                            @Result(column="birthday", property="birthday")

         })

         public List<Person> selectPersonByLike(Map<String,Object> map);

        

 

         @Insert("insert into person (person_id, name, gender, person_addr, birthday) " +

                            "values(#{personId}, #{name}, #{gender}, #{personAddr}, #{birthday})")

         @SelectKey(before = false, keyProperty = "personId", resultType = java.lang.Integer.class, statement = { "select LAST_INSERT_ID()" })

         public void insert(Person person);

        

         @Update("update person p set p.name = #{name}," +

                            "p.gender = #{gender}," +

                            "p.person_addr = #{personAddr}," +

                            "p.birthday = #{birthday} " +

                            "where p.person_id = #{personId}")

         public void update(Person person);

        

         @Delete("delete from person where person_id = #{personId}")

         public void delete(Integer personId);

        

         @SelectProvider(type=SqlHelper.class, method="getSql")

         @Results(value={

                            @Result(column="person_id", property="personId", id=true),

                            @Result(column="name", property="name"),

                            @Result(column="gender", property="gender"),

                            @Result(column="person_addr", property="personAddr"),

                            @Result(column="birthday", property="birthday")

         })

         public List<Person> selectPersonByCondition(Map<String,Object> map);

        

         @Select("select * from person p, orders o where p.person_id = o.person_id and p.person_id = #{personId}")

         @ResultMap(value="com.rl.mapper.PersonMapper.selectPersonAndOrderByPIdRM")

         public Person selectOrdersByPersonId(Integer personId);

}

测试类:

package com.rl.test;

 

import java.io.InputStream;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.Before;

import org.junit.Test;

 

import com.rl.dao.PersonDao;

import com.rl.model1.Person;

 

/**

 * mybatis的注解开发

 */

public class MybatisTest6 {

 

         SqlSessionFactory sessionFactory;

        

         @Before

         public void setUp() throws Exception {

                   InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");

                   sessionFactory = new SqlSessionFactoryBuilder().build(in);

                   //注册接口

                   sessionFactory.getConfiguration().addMapper(PersonDao.class);

         }

 

         @Test

         public void selectPersonById(){

                   SqlSession session = sessionFactory.openSession();

                   //获得接口的实现类

                   PersonDao personDao = session.getMapper(PersonDao.class);

                   try {

                            Person person = personDao.selectPersonById(1);

                            System.out.println(person);

                   }finally{

                            session.close();

                   }

         }

        

         @Test

         public void selectPersonAll(){

                   SqlSession session = sessionFactory.openSession();

                   //获得接口的实现类

                   PersonDao personDao = session.getMapper(PersonDao.class);

                   try {

                            List<Person> pList = personDao.selectPersonAll();

                            for(Person p : pList){

                                     System.out.println(p);

                            }

                   } finally {

                            session.close();

                   }

         }

        

         @Test

         public void selectPersonByParams() throws Exception {

                   SqlSession session = sessionFactory.openSession();

                   //获得接口的实现类

                   PersonDao personDao = session.getMapper(PersonDao.class);

                   Map<String,Object> map = new HashMap<String,Object>();

                   map.put("gender", 0);

                   map.put("birthday", new SimpleDateFormat("yyyy-MM-dd").parse("2014-08-08"));

                   try {

                            List<Person> pList = personDao.selectPersonByParams(map);

                            for(Person p : pList){

                                     System.out.println(p);

                            }

                   } finally {

                            session.close();

                   }

         }

        

         @Test

         public void selectPersonByLike() throws Exception{

                   SqlSession session = sessionFactory.openSession();

                   //获得接口的实现类

                   PersonDao personDao = session.getMapper(PersonDao.class);

                   Map<String,Object> map = new HashMap<String,Object>();

                   map.put("name", "");

                   try {

                            List<Person> pList = personDao.selectPersonByLike(map);

                            for(Person p : pList){

                                     System.out.println(p);

                            }                          

                   }finally{

                            session.close();

                   }

         }

        

         @Test

         public void insert() throws Exception{

                   SqlSession session = sessionFactory.openSession();

                   //获得接口的实现类

                   PersonDao personDao = session.getMapper(PersonDao.class);

                   try {

                            Person p = new Person();

                            p.setName("西门庆");

                            p.setGender("0");

                            p.setPersonAddr("阳谷县");

                            p.setBirthday(new Date());

                            personDao.insert(p);

                            session.commit();

                   }catch(Exception ex){

                            ex.printStackTrace();

                            session.rollback();

                   }finally{

                            session.close();

                   }

         }

        

         @Test

         public void update() throws Exception{

                   SqlSession session = sessionFactory.openSession();

                   //获得接口的实现类

                   PersonDao personDao = session.getMapper(PersonDao.class);

                   try {

                            Person p = new Person();

                            p.setPersonId(5);

                            p.setName("大官人");

                            p.setGender("0");

                            p.setPersonAddr("阳谷县");

                            p.setBirthday(new Date());

                            personDao.update(p);

                            session.commit();

                   }catch(Exception ex){

                            ex.printStackTrace();

                            session.rollback();

                   }finally{

                            session.close();

                   }

         }

        

         @Test

         public void delete() throws Exception{

                   SqlSession session = sessionFactory.openSession();

                   //获得接口的实现类

                   PersonDao personDao = session.getMapper(PersonDao.class);

                   try {

                            personDao.delete(5);

                            session.commit();

                   }catch(Exception ex){

                            ex.printStackTrace();

                            session.rollback();

                   }finally{

                            session.close();

                   }

         }

        

         /**

          * 动态条件组合查询

          */

         @Test

         public void selectPersonByCondition() throws Exception{

                   SqlSession session = sessionFactory.openSession();

                   //获得接口的实现类

                   PersonDao personDao = session.getMapper(PersonDao.class);

                   Map<String,Object> map = new HashMap<String,Object>();

                   //map.put("name", "");

                   //map.put("gender", "0");

                   //map.put("personAddr", "");

                   //map.put("birthday", new Date());

                   try {

                            List<Person> pList = personDao.selectPersonByCondition(map);

                            for(Person p : pList){

                                     System.out.println(p);

                            }

                   } finally {

                            session.close();

                   }

         }

         /**

          * 管理查询

          */

         @Test

         public void selectOrdersByPersonId() throws Exception{

                   SqlSession session = sessionFactory.openSession();

                   //获得接口的实现类

                   PersonDao personDao = session.getMapper(PersonDao.class);

                   try {

                            Person person = personDao.selectOrdersByPersonId(1);

                            System.out.println(person);

                   }finally{

                            session.close();

                   }

         }

}

 

目录
相关文章
|
1月前
|
存储 Java 数据库连接
Mybatisplus中的主要使用注解
3.有些注解需要配合其他配置使用。例如,@Version需要配合乐观锁插件使用,@EnumValue需要配合对应的TypeHandler使用。
91 11
|
2月前
|
SQL XML Java
MyBatis——选择混合模式还是全注解模式?
在MyBatis开发中,Mapper接口的实现方式有两种:全注解模式和混合模式。全注解模式直接将SQL嵌入代码,适合小规模、简单逻辑项目,优点是直观简洁,但复杂查询时代码臃肿、扩展性差。混合模式采用接口+XML配置分离的方式,适合大规模、复杂查询场景,具备更高灵活性与可维护性,但学习成本较高且调试不便。根据项目需求与团队协作情况选择合适模式至关重要。
61 4
|
3月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
74 0
|
5月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
208 2
|
6月前
|
SQL Java 数据库连接
MyBatis-Plus高级用法:最优化持久层开发
MyBatis-Plus 通过简化常见的持久层开发任务,提高了开发效率和代码的可维护性。通过合理使用条件构造器、分页插件、逻辑删除和代码生成器等高级功能,可以进一步优化持久层开发,提升系统性能和稳定性。掌握这些高级用法和最佳实践,有助于开发者构建高效、稳定和可扩展的企业级应用。
432 13
|
7月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
1263 5
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
7月前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
229 5
|
7月前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
125 3
|
7月前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
509 3
|
7月前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
628 1