day04-原生的API&注解方式
原生的API&注解方式
1.MyBatis原生的API调用
1.1原生API快速入门
需求:在前面的项目基础上,使用MyBatis原生的API完成,即直接通过SqlSession接口的方法来完成操作

1.2代码实现
MyBatisNativeTest.java,演示原生的API操作
其实底层还是使用的映射的xml文件的sql语句
package com.li.mapper;
import com.li.entity.Monster;
import com.li.util.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;
import java.util.Date;
import java.util.List;
/**
* @author 李
* @version 1.0
* 演示使用 Mybatis原生API操作
*/
public class MyBatisNativeTest {
private SqlSession sqlSession;
//初始化方法
@Before
public void init() {
sqlSession = MybatisUtils.getSqlSession();
//sqlSession的运行类型是DefaultSqlSession
System.out.println("sqlSession运行类型--" + sqlSession.getClass());
}
//使用sqlSession原生的API调用编写的方法
//其实还是去找映射的Mapper.xml文件的sql语句
@Test
public void myBatisNativeCrud() {
//添加
/*
* @Override
* public int insert(String statement, Object parameter) {
* return update(statement, parameter);
* }
* statement-接口方法的完整路径
* parameter-接口方法的入参
*/
Monster monster = new Monster();
monster.setAge(100);
monster.setBirthday(new Date());
monster.setEmail("kate2@qq.com");
monster.setGender(0);
monster.setName("猫精-999");
monster.setSalary(1000);
int insert =
sqlSession.insert("com.li.mapper.MonsterMapper.addMonster", monster);
System.out.println("insert--" + insert);
//删除
int delete =
sqlSession.delete("com.li.mapper.MonsterMapper.delMonster", 6);
System.out.println("delete--" + delete);
//修改
Monster monster2 = new Monster();
monster2.setAge(22);
monster2.setBirthday(new Date());
monster2.setEmail("king789@qq.com");
monster2.setGender(0);
monster2.setName("牛魔王");
monster2.setSalary(8888);
monster2.setId(3);//要带上id,如果没有就不知道修改哪个对象了
int update =
sqlSession.update("com.li.mapper.MonsterMapper.updateMonster", monster2);
System.out.println("update--" + update);
//查询--除了查询,其他的都要使用事务提交
List<Monster> monsters =
sqlSession.selectList("com.li.mapper.MonsterMapper.findAllMonster");
for (Monster monster3 : monsters) {
System.out.println("monster--" + monster3);
}
if (sqlSession != null) {
sqlSession.commit();
sqlSession.close();
}
System.out.println("操作成功!");
}
}
2.MyBatis注解方式操作
2.1注解方式快速入门
之前我们是使用xml文件的方式来实现接口声明的方法,现在使用注解方式来完成增删改查
(1)创建接口 MonsterAnnotation.java,添加注解
package com.li.mapper;
import com.li.entity.Monster;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
/**
* @author 李
* @version 1.0
* MonsterAnnotation:使用注解的方式来配置我们的接口方法
*/
public interface MonsterAnnotation {
//添加 monster
/**
* xml文件的配置方式:
* <insert id="addMonster" parameterType="Monster"
* useGeneratedKeys="true" keyProperty="id">
* INSERT INTO `monster`
* (`age`,`birthday`,`email`,`gender`,`name`,`salary`)
* VALUES (#{age},#{birthday},#{email},#{gender},#{name},#{salary})
* </insert>
*/
@Insert(value = "INSERT INTO `monster` " +
"(`age`,`birthday`,`email`,`gender`,`name`,`salary`) " +
"VALUES (#{age},#{birthday},#{email},#{gender},#{name},#{salary})")
public void addMonster(Monster monster);
//根据id删除一个Monster
@Delete(value = "DELETE FROM `monster` WHERE `id`=#{id}")
public void delMonster(Integer id);
//修改Monster
//注解配置时value可以省略
@Update("UPDATE `monster` " +
"SET `age`=#{age},`birthday`=#{birthday},`email`=#{email}," +
"gender`=#{gender},`name`=#{name},`salary`=#{salary} " +
"WHERE `id`=#{id};")
public void updateMonster(Monster monster);
//查询-根据id
@Select("SELECT * FROM `monster` WHERE id=#{id}")
public Monster getMonsterById(Integer id);
//查询所有的Monster
@Select("SELECT * FROM `monster`")
public List<Monster> findAllMonster();
}
(2)修改mybatis-config.xml,对MonsterAnnotation 进行注册
<mappers>
<!--<mapper resource="com/li/mapper/MonsterMapper.xml"/>-->
<!--如果是通过注解的方式,可不再使用MonsterMapper.xml
但是需要在mybatis-config.xml中注册/引入含注解的类-->
<mapper class="com.li.mapper.MonsterAnnotation"/>
</mappers>
(3)测试
package com.li.mapper;
import com.li.entity.Monster;
import com.li.util.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;
import java.util.Date;
import java.util.List;
/**
* @author 李
* @version 1.0
*/
public class MonsterAnnotationTest {
private SqlSession sqlSession;
private MonsterAnnotation monsterAnnotation;
@Before
public void init() {
sqlSession = MybatisUtils.getSqlSession();
monsterAnnotation = sqlSession.getMapper(MonsterAnnotation.class);
//class com.sun.proxy.$Proxy11
System.out.println("monsterAnnotation的运行类型=" + monsterAnnotation.getClass());
}
@Test
public void addMonster() {
Monster monster = new Monster();
monster.setAge(99);
monster.setBirthday(new Date());
monster.setEmail("queen@qq.com");
monster.setGender(0);
monster.setName("狐狸精");
monster.setSalary(3000);
//使用在接口方法配置注解的方式完成对DB的操作
monsterAnnotation.addMonster(monster);
//如果是增删改,需要提交事务
if (sqlSession != null) {
sqlSession.commit();
sqlSession.close();
}
}
@Test
public void findAllMonster() {
//使用接口方法配置注解的方式完成操作
List<Monster> allMonster = monsterAnnotation.findAllMonster();
for (Monster monster : allMonster) {
System.out.println("monster=" + monster);
}
if (sqlSession != null) {
sqlSession.close();
}
}
}
2.2注意事项和使用细节
如果是通过注解的方式,就不再使用MonsterMapper.xml文件,但是需要在mybatis的配置文件中引入含注解的类/接口
添加时,如果要返回自增长的id值,可以使用@Option注解,组合使用
/**
* 1.useGeneratedKeys = true 返回自增的值
* 2.keyProperty = "id" 自增对应的对象属性
* 3.keyColumn = "id" 自增的表字段
* 4.如果 keyProperty 和 keyColumn 的值相同,可以省略 keyColumn
*/
@Insert(value = "INSERT INTO `monster` " +
"(`age`,`birthday`,`email`,`gender`,`name`,`salary`) " +
"VALUES (#{age},#{birthday},#{email},#{gender},#{name},#{salary})")
@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
public void addMonster(Monster monster);
day04-原生的API&注解方式的更多相关文章
- springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany
springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...
- Spring学习笔记之 Spring IOC容器(二) 之注入参数值,自动组件扫描方式,控制Bean实例化方式,使用注解方式
本节主要内容: 1. 给MessageBean注入参数值 2. 测试Spring自动组件扫描方式 3. 如何控制ExampleBean实例化方式 4. 使用注解方式重构Jdb ...
- SpringMVC的controller方法中注解方式传List参数使用@RequestBody
在SpringMVC控制器方法中使用注解方式传List类型的参数时,要使用@RequestBody注解而不是@RequestParam注解: //创建文件夹 @RequestMapping(value ...
- 注解方式传LIST@RequestBody
在SpringMVC中使用注解方式传List类型的参数时,要使用@RequestBody注解而不是@RequestParam注解 //创建文件夹 @RequestMapping(value=" ...
- mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类
相信大家在刚开始学习mybatis注解方式,或者spring+mybatis注解方式的时候,一定会有一个疑问,为什么mybatis的dao接口只需要一个接口,不需要实现类,就可以正常使用,笔者最开始的 ...
- spring 纯注解方式 与AOP
spring注解方式 以前我也使用过纯注解方式.现在在这里做个记录 我们先认识几个我们都耳熟能详的注解 @configuration :从spring3.0这个注解就可以用于定义配置类,可以替换xml ...
- SpringBoot入门教程(四)MyBatis generator 注解方式和xml方式
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...
- spring jwt springboot RESTful API认证方式
RESTful API认证方式 一般来讲,对于RESTful API都会有认证(Authentication)和授权(Authorization)过程,保证API的安全性. Authenticatio ...
- Hibernate 注解方式配置
在Hibernate3之后就可以使用注解的方式去配置.而且在工作中我们使用的更多的也是注解方式去配置项目,所以还有一部分使用配置文件去配置的一些关系就不在此去一一举例,需要了解的朋友可以去查看Hibe ...
- Spring第七弹—依赖注入之注解方式注入及编码解析@Resource原理
注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果. 手工装配依赖对象 手工装配依赖对象,在这种方式中又有两种编 ...
随机推荐
- 【技能篇】解决vs编译器scanf等函数不安全问题【手把手操作-一分钟解决】
[技能篇]解决Vs编译器scanf等函数不安全问题 文章目录 说在前面 博主给大家的福利 解决方案 解决过程 尾声 说在前面 大家刚开始学习编程的时候,使用vs编译器.使用scanf等函数的时候遇到的 ...
- Linux Shell获取指定日期 N 天/月/年前(后)的日期
我们有时候在写批处理 Shell 脚本时,可能需要获取指定日期前(后) N 天/月/年的日期,这里的 N 可以是 1 天/月/年.2 天/月/年.3 天/月/年等等.方法其实很简单,这里做一个简单记录 ...
- [Elasticsearch] Elasticsearch 启动访问报错问题
Elasticsearch 启动访问报错问题 产生的问题与解决方案 环境:Windows 10 ES 版本:8.12.0 现象: 双击 elasticsearch.bat 文件启动后,访问 http: ...
- SP10050 POWTOW - Power Tower City 题解
题目传送门 前置知识 扩展欧拉定理 解法 本题幂塔是有限层的,这里与 luogu P4139 上帝与集合的正确用法 中的无限层幂塔不同,故需要在到达递归边界 \(n+1\) 时进行特殊处理,对于处理 ...
- NC20272 [SCOI2009]生日快乐
题目链接 题目 题目描述 windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕.现在包括windy ,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积 ...
- 【framework】AMS启动流程
1 前言 AMS 即 ActivityManagerService,负责 Activy.Service.Broadcast.ContentProvider 四大组件的生命周期管理.本文主要介绍 A ...
- 大白菜方式制作win10 PE启动U盘
说明 最近帮朋友安装下win10,用了2种制作U盘启动盘的方式.记录一下也方便大家少走弯路. 准备的工具: 1.大白菜软件 2.win10镜像 3.1个U盘,U盘容量 > 8G即可. 制作PE启 ...
- python利用random模块随机生成MAC地址和IP地址
import random def randomMac(): macstring = "0123456789abcdef"*12 macstringlist=random. ...
- 硬件开发笔记(五): 硬件开发基本流程,制作一个USB转RS232的模块(四):创建CON连接器件封装并关联原理图元器件
前言 有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的.为了更好的表述封装设计过程,本文描述了一个创建CON标准连接件封装,创建 ...
- python中如何使两个序列相加不改变内存地址的几种方式
# 方式1 a = [1,2,3] print(a) # 4551311680 a.extend([4,5]) print(a) # 4551311680 # 方式2 b = [1,2,3] prin ...