赞
踩
目录
这篇文章我们将来讲解一下Mybatis的注解开发。
注解的方式比较简单,但是实际开发不推荐使用注解的方式,而推荐使用配置文件的方式,因为使用配置文件的方式不需要更改源代码
这里我先列一下常用的注解和其含义,然后我们根据具体实例来应用一下
@Insert :添加
@Update:修改
@Delete:删除
@Select:查询
@Result:实现结果集封装
@Results:可以和@Result一起使用,封装多个结果集
@One:实现一对一或多对一的结果集封装
@Many:实现一对多结果集封装
下面,就让我们通过具体实例来看一下Mybatis的注解开发如何使用。
第一步,我们创建一张实验表(表中字段及其类型如下图如示):
第二步,我们创建实体类(截图及代码如下):
-
-
- public class Car {
-
- private Integer id;
- private String name;
- private String paizhao;
- private String card;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getPaizhao() {
- return paizhao;
- }
-
- public void setPaizhao(String paizhao) {
- this.paizhao = paizhao;
- }
-
- public String getCard() {
- return card;
- }
-
- public void setCard(String card) {
- this.card = card;
- }
-
- @Override
- public String toString() {
- return "Car{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", paizhao='" + paizhao + '\'' +
- ", card='" + card + '\'' +
- '}';
- }
- }
第三步,我们创建一个接口(截图如下):
第四步,在sqlMapConfig.xml文件中进行相关配置(截图如下):
说明:
第32行:这里是加载了dao包下的所有接口信息
第33行:这里是加载了dao包下的CarDao接口信息
这就是二者唯一的区别,都可以使用。
配置到这里就结束了,下面让我们看一下具体怎么写。
之前,我们是先写xml文件,再写接口,然后写测试方法,其中xml与接口是有联系的。现在,没有了xml文件,我们就直接在接口中写SQL语句。下面根据实例,我们来看下具体的操作。
例如:查询所有车辆的信息。
第一步:写接口中的方法,代码如下:
- @Select("select * from car")
- @Results(id = "CarMap01",value = {
- @Result(property = "id",column = "id"),
- @Result(property = "name",column = "name"),
- @Result(property = "paizhao",column = "paizhao"),
- @Result(property = "card",column = "card")
- })
- public List<Car> findAll();
然后,我们来看下截图:
说明:
第12行:@Select 是注解,表明这是一个用来查询的语句,后面括号内写具体的查询语句,这就没什么好说的
第13行:@Results 是对多个结果集的一种封装,我们是查询car表的所有信息,那么里面肯定有许多字段,我们就用@Results对这些字段进行一个封装,可以类比前面的resultType,id是这个结果集的名称,也叫唯一标识符。value是这个结果集所包含的字段信息。@Result 后面跟的内容可以理解为一种映射,是数据库字段到实体类变量的映射;property 后面跟实体类中定义的字段名称,column后面跟数据库中定义的字段名称。这个可以类比前面的resultMap。
第19行:很简单的一个小接口,没啥好说的。
第二步,写测试方法,代码如下:
- public class CarTest {
- private InputStream in =null;
- private SqlSession session= null;
- private CarDao carDao = null;
-
- @Before
- public void init() throws IOException {
- in = Resources.getResourceAsStream("sqlMapConfig.xml");
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
- session = sqlSessionFactory.openSession();
- carDao = session.getMapper(CarDao.class);
- }
-
- @After //@After: 后置通知, 在方法执行之后执行 。
- public void destory() throws IOException {
- //释放资源
- session.close();
- in.close();
- }
-
- @Test
- public void findAll(){
- List<Car> cars = carDao.findAll();
- for (Car car: cars) {
- System.out.println(car.toString());
- }
- }
-
- }
注意:里面的东西需要自己导包
测试方法截图如下:
第三步,执行,看结果:
有问题吗?没有问题!So easy!
例:查询id=1的汽车的信息
第一步,写接口中的方法,代码如下图所示:
- @Select("select * from car where id =#{id}")
- @ResultMap(value="CarMap01")
- public Car findById(Integer id);
截图如下所示:
说明:
第23行:ResultMap,联系前面关联映射的resultMap的用法,后面的value写的是上面写好的Results的id,即调用上面的包装结果,当然,你也可以再写一遍
第二步,写测试方法(如下图所示):
第三步,点击测试(结果如下图所示):
第一步,写接口中的方法,代码如下:
- @Insert("insert into car(name,paizhao,card) values(#{name},#{paizhao},#{card})")
- @SelectKey(statement = "select last_insert_id()",keyColumn = "id",keyProperty = "id",before = false,resultType = Integer.class)
- public int insertCar(Car car);
截图如下:
说明:
第24行:算是一种固定写法,不用管它,用的不多,记住就好
第二步,写测试方法(截图如下):
第三步,运行测试(截图如下):
例:修改id=1的信息
第一步,写接口中的方法,如图:
第二步,写测试方法,如图:
第三步,测试运行,如图:
按顺序,三步走,截图如下:
按顺序,三步走,截图如下:
第一步,相关配置:
注释掉 teacher类中的学生部分
解掉 student类中的老师部分 的注释
sqlMapConfig中写入加载语句
然后,三步走,截图如下:
话不多说,三(四)步走,截图如下:
这块内容用的不多,所以写的很简单,大家了解即可,如果想要使用,可以对照图片进行书写。
以上内容,如有错误,敬请指出!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。