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原理
注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果. 手工装配依赖对象 手工装配依赖对象,在这种方式中又有两种编 ...
随机推荐
- Xcode的Search Paths配置
在Xcode中的文件搜索路径配置有两个地方,一个是Project层的配置,一个是Target的配置. Project-Build Settings-Search Paths Target-Build ...
- 洛谷P1249最大乘积,数论找规律
这道题是数论加高精度,高精度倒好说,就是高精度乘法实现,模拟列竖式乘法,但是找出要乘的这几个数实属不容易,没学过数论,只能从题解中学怎么找规律这里引用一下洛谷题解区赞数最高的题解 不知道大家看其他的题 ...
- SESSION会话机制解析
Windows Session(会话)的概念 会话 session 是由代表单个用户登录会话的所有进程和系统对象组成的.其中的对象包括所有的窗口,桌面和windows stations.桌面是特定se ...
- 你应该知道的提升Visual Studio开发能力的5个技巧
如果你像我一样,或许你也沉迷于开发者工具.这就是我喜欢 Visual Studio 的原因之一--它有无数的生产力技巧. 这篇文章将展示五个这样的技巧,这些技巧对我每天的工作都有帮助.请注意,这些仅适 ...
- Ubuntu20.04安装记录
在Ubuntu下将iso文件刻录到U盘, 可以使用系统自带的Startup Disk Creator. 分区方式 使用整个硬盘, 一个512G SSD, 使用默认的分区方式, 会创建一个512M的EF ...
- Set与WeakSet
Set与WeakSet Set对象允许存储任何类型的唯一值,无论是原始值或者是对象引用,Set对象中的值不会重复. WeakSet对象允许存储对象弱引用的唯一值,WeakSet对象中的值同样不会重复, ...
- Vue+SpringBoot+ElementUI实战学生管理系统-7.专业管理模块
1.章节介绍 前一篇介绍了院系管理模块,这一篇编写专业管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.实现效果 专业列表 修改专业 4.模块 ...
- CentOS 7 SSH连接超时自动断开解决方案
用SSH登录到Linux的时候,由于默认的连接超时时间很短,经常断开! 1.修改文件 # vi /etc/ssh/sshd_config # vi /etc/ssh/sshd_config 找到 #C ...
- dpt-shell 抽取壳实现原理分析(加壳逻辑)
开源项目位置(为大佬开源精神点赞) https://github.com/luoyesiqiu/dpt-shell 抽取壳分为两个步骤 加壳逻辑: 一 对apk进行解析,将codeItem抽出到一个文 ...
- [Android 逆向]frida 破解 切水果大战原版.apk
1. 手机安装该apk,运行,点击右上角礼物 提示 支付失败,请稍后重试 2. apk拖入到jadx中,待加载完毕后,搜素失败,找到疑似目标类MymmPay的关键方法payResultFalse 4. ...