目录
3.3.2 通过SqlSessionFactoryBean生成SqlSessionFactory工厂
3.3.4 通过SqlSessionDaoSupport实现Dao功能
我们在实际开发的对数据库操作一般使用专业的数据库框架,目前比较流行的就是mybaits,所以本章讲一下。
MyBatis-Spring使用起来也简单,官方也支持中文 ,如果用springBoot加入mybatis更是简单快捷!
一、前言
1.1 mybatis说明
我们没使用mybatis之前使用最多的是Hibernate,Hibernatehibernate可以自动生成SQL语句,自动执行,当我们有些需要自己制定实现“半自动”的场景就不适合了,如
1. 只对外开放部分敏感的SQL语句,其它敏感的SQL不能生成。
2. 涉及逻辑部分的数据库操作必须由存储过程完成,金融行业,比如银行是最严格的。
3. 高并的时候,需要做SQL优化,修改SQL语句。
等等,面对这样的需求Hibernate不再适合,所以使用jdck进行数据库操作也不错,但是麻烦,而“半自动化”的Mybatis刚好解决了上面的问题。
Mybatis使用的是ORM对象关系映射(Object Relational Mapping)进行设计的,关系数据库拿mysql为例:
- 数据表的行映射对象(即实例)
- 数据表的列(字段)映射对象的属性
1.2 关于mybatis-spring
mybatis-spring看名字就知道是spring的一个插件,向spring提供mybatis的支持。
在学习mybatis-spring之前需要会使用spring,其它懂mybatis,有兴趣的话可以看一下mybatis中文官网:http://www.mybatis.org/mybatis-3/zh/getting-started.html,了解一下mybatis概念,一般花1-2小时就看完了。下面是MyBatis 框架的执行流程图
mybatis-spring使用比mybatis简单得多了,中文官网为
http://www.mybatis.org/spring/zh/index.html 看一下入门大概半天就搞定了。具体我也不多讲了。
要和 Spring 一起使用 MyBatis,需要在 Spring 应用上下文中定义至少两样东西:
一个 SqlSessionFactory 和至少一个数据映射器类。
SqlSessionFactory :
可以使用SqlSessionFactoryBean 来创建,在此之前需要一个 DataSource(数据源)。 这可以是任意的 DataSource,只需要和配置其它 Spring 数据库连接一样配置它就可以了。其它可以先不设置
MapperFactoryBean :
通过它将接口加入到 Spring 中,将会负责 SqlSession 的创建和关闭。如果使用了 Spring 的事务功能,那么当事务完成时,session 将会被提交或回滚。最终任何异常都会被转换成 Spring 的 DataAccessException 异常。
就记住上面2大重点就行了。其中Mapper可以使用手工的和扫描方式。
1.3 安装前说明
名称 | 版本 | 安装方式 | 备注 |
系统 | win10 | - | 64位,旗舰版 |
jdk | 14.0.1 | exe | java开发工具目前最高最新版本 |
idea | 2020.1 | exe | java最著名的ide工具 |
具体安装见:《hualinux java 1.5:java开发工具idea 2020安装及配置》
我是按照《hualinux spring 4.15:spring添加maven支持 10分钟学会mavne》文章建立了一个名为spring-mybatis的spring项目,并添加了maven支持、指定了java版本,所使用的依赖如下:
根据mybatis-spring官网 知道下列需要安装的
安装上面的spring、spring Batch、MyBatis、MyBatis-Spring还不行,还需要安装下面的基础依赖
c3p0:主要是读取外部配置文件,一般数据库配置文件放在外部,我这里使用yml方式
mchange-commons-java:c3p0数据库连接池的辅助包
mysql-connector-java:mysql的jdbc驱动包,是java连接mysql数据库使用的,我这里只是配置文件,并没用到mysql数据库
spring-jdbc:spring操作jdbc操作数据库用的,如mysql数据库
是不是要安装很多软件啊?!如果你不用maven这种管理工具,那就有比较郁闷了。
二、mybatis-spring安装
根据官网 mybatis-spring 官网 http://www.mybatis.org/spring/zh/index.html
MyBatis-Spring是Spring支持MyBatis的插件,所以MyBatis肯定是要安装的,Spring也是要的,Spring是基于java,spring batch能读取大量数据并批量处理,还可以格式化数据写入数据库中。
我这里使用的是maven安装,pom.xml 配置文件内容为:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hualinx</groupId>
<artifactId>spring-mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- #########################数据库连接 start################################# -->
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<!-- #########################数据库连接 end ################################# -->
<!-- #########################MyBatis-Spring start############################# -->
<!-- 没有版本5 目前最新版本 -->
<!-- https://mvnrepository.com/artifact/org.springframework.batch/spring-batch-core -->
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-core</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.batch/spring-batch-infrastructure -->
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-infrastructure</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<!-- #########################MyBatis-Spring END ############################# -->
<!-- JUnit5:单元测试需要用到 在本文可以不安装-->
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 指定java版本-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>14.0.1</source>
<target>14.0.1</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
按上面配置好,之后点一下“导入maven改变”
则maven会自动从maven仓库安装软件
一下子就安装好了,是不是比较简单
三、例1:通过sid查单个记录(注解式)
3.1 例子说明
本例子我将以注解方式编写,因为XML方式编写网上已经一大把了,以注解方式编写却很少
我写一个简单的,主要是以学生表为例子,数据库是mysql,数据表创建见 附录一,实现如下简单功能:
1. 以通过sid(学号)查单个学生成绩,查询学生名、语文、数学成绩。
2. 查询所有学生成绩,包括sid、学生名、语文、数学成绩
其它的自己慢慢探索了
在这里我将会用到mybatis的SqlSession中selectOne()方法和selectList()方法,见附录二
3.2 目录结构
pom.xml:maven配置文件
db.yml:数据库配置文件,这里我使用的是mysql
Stu:学生生POJO对象
StuConf:学生表配置文件
StuMapper:映射类
StuDao:Dao接口层,为什么要写一个接口,在编程基础篇,已经说了,是为了方便扩展
UserDAOImpl:Dao的实现类
MainOfStu:主程序
3.3 实现代码
3.3.1 学生表结构
stu学生表结构如下:
根据上面的表结构,转化为对象,所以要编写一个类来保存,我这里不要id列
com.hualinux.stu.Stu.java代码如下:
package com.hualinux.stu;
public class Stu {
private String sid;
private String name;
private float yuWen;
private float shuXue;
private String sex;
private String zhiWei;
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getYuWen() {
return yuWen;
}
public void setYuWen(float yuWen) {
this.yuWen = yuWen;
}
public float getShuXue() {
return shuXue;
}
public void setShuXue(float shuXue) {
this.shuXue = shuXue;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getZhiWei() {
return zhiWei;
}
public void setZhiWei(String zhiWei) {
this.zhiWei = zhiWei;
}
@Override
public String toString() {
return "Stu{" +
"sid='" + sid + '\'' +
", name='" + name + '\'' +
", yuWen=" + yuWen +
", shuXue=" + shuXue +
", sex='" + sex + '\'' +
", zhiWei='" + zhiWei + '\'' +
'}';
}
}
运行mysql按附录一插入数据
3.3.2 通过SqlSessionFactoryBean生成SqlSessionFactory工厂
官网:http://www.mybatis.org/spring/zh/factorybean.html
在 MyBatis-Spring 中,可使用 SqlSessionFactoryBean来创建 SqlSessionFactory。
SqlSessionFactory 需要一个 DataSource(数据源)。 这可以是任意的 DataSource,只需要和配置其它 Spring 数据库连接一样配置它就可以了。
建立数据配置文件resources-->db.yml
user: hua
pwd: hua123
driverClass: com.mysql.cj.jdbc.Driver
jdbcUrlTest: jdbc:mysql://127.0.0.1:3306/hua_test?serverTimezone=GMT%2B8
jdbcUrlDev: jdbc:mysql://127.0.0.1:3306/hua_dev?serverTimezone=GMT%2B8
jdbcUrlProd: jdbc:mysql://127.0.0.1:3306/hua?serverTimezone=GMT%2B8
注:冒号后面都有一个空格的,而且不能漏掉!这个是由YAML语法决定的
com.hualinux.stu.StuConf.java
package com.hualinux.stu;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
@PropertySource(value={"classpath:/db.yml"})
@ComponentScan("com.hualinux.stu")
@Configuration
public class StuConf {
@Value("${user}")
private String user;
@Value("${pwd}")
private String pwd;
@Value("${driverClass}")
private String driverClass;
@Value("${jdbcUrlTest}")
private String jdbcUrlTest;
@Value("${jdbcUrlDev}")
private String jdbcUrlDev;
@Value("${jdbcUrlProd}")
private String jdbcUrlProd;
//数据源
@Bean
public DataSource dataSource() throws Exception{
//主要是测试一下是否读到db.yml文件数据,及是否填写正确,密码不能输出!
System.out.println(user+"\n"+jdbcUrlProd+"\n"+driverClass);
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setUser(user);
dataSource.setPassword(pwd);
dataSource.setDriverClass(driverClass);
//测试环境使用的数据库
dataSource.setJdbcUrl(jdbcUrlProd);
return dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
// 设置数据源
factoryBean.setDataSource(dataSource());
return factoryBean.getObject();
}
}
3.3.3 注入映射器mapper
官网:http://www.mybatis.org/spring/zh/mappers.html
可以通过 MapperFactoryBean 将接口加入到 Spring 中,MapperFactoryBean 将会负责 SqlSession 的创建和关闭。如果使用了 Spring 的事务功能,那么当事务完成时,session 将会被提交或回滚。最终任何异常都会被转换成 Spring 的 DataAccessException 异常。
#1 编写mapper接口
com.hualinux.stu.mapper.StuMapper.java
package com.hualinux.stu.mapper;
import com.hualinux.stu.Stu;
import org.apache.ibatis.annotations.Select;
public interface StuMapper {
@Select("SELECT sid,NAME,yuWen,shuXue FROM stu WHERE sid = #{sid}")
Stu getStu(String sid);
}
#2. 注入映射器
有2种方式
方式一(推荐,肯定用最简单的):
com.hualinux.stu.StuConf.java配置类上加一个@MapperScan注解,指定mapper所在的目录,下面最顶一个就是了
@MapperScan("com.hualinux.stu.mapper") @PropertySource(value={"classpath:/db.yml"}) @ComponentScan("com.hualinux.stu") @Configuration public class StuConf {
方式二(了解):
com.hualinux.stu.StuConf.java类,加多一个注册器bean,如下:
/** * 如果没有编写映射器,那么在类上面添加 @MapperScan 注解即可 * MapperFactoryBean 将会负责 SqlSession 的创建和关闭。 * 如果使用了 Spring 的事务功能,那么当事务完成时,session 将会被提交或回滚。 */ @Bean public MapperFactoryBean<StuMapper> stuMapper() throws Exception{ MapperFactoryBean<StuMapper> factoryBean = new MapperFactoryBean<StuMapper>(StuMapper.class); // 所指定的映射器类必须是一个接口,而不是具体的实现类 factoryBean.setMapperInterface(StuMapper.class); factoryBean.setSqlSessionFactory(sqlSessionFactory()); return factoryBean; }
一看上面方法二就晕,还是方式一好,直接在类的顶上加一个 @MapperScan注解即可
此时com.hualinux.stu.StuConf.java的完整代码为:
package com.hualinux.stu;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
@MapperScan("com.hualinux.stu.mapper")
@PropertySource(value={"classpath:/db.yml"})
@ComponentScan("com.hualinux.stu")
@Configuration
public class StuConf {
//读取db.yml的值
@Value("${user}")
private String user;
@Value("${pwd}")
private String pwd;
@Value("${driverClass}")
private String driverClass;
@Value("${jdbcUrlTest}")
private String jdbcUrlTest;
@Value("${jdbcUrlDev}")
private String jdbcUrlDev;
@Value("${jdbcUrlProd}")
private String jdbcUrlProd;
//数据源
@Bean
public DataSource dataSource() throws Exception{
//主要是测试一下是否读到db.yml文件数据,及是否填写正确,密码不能输出!
System.out.println(user+"\n"+jdbcUrlProd+"\n"+driverClass);
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setUser(user);
dataSource.setPassword(pwd);
dataSource.setDriverClass(driverClass);
//测试环境使用的数据库
dataSource.setJdbcUrl(jdbcUrlProd);
return dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
// 设置数据源
factoryBean.setDataSource(dataSource());
return factoryBean.getObject();
}
}
3.3.4 通过SqlSessionDaoSupport实现Dao功能
SqlSessionDaoSupport 是一个抽象的支持类,用来为你提供 SqlSession。调用 getSqlSession() 方法你会得到一个 SqlSessionTemplate,之后可以用于执行 SQL 方法。
SqlSessionTemplate 是 MyBatis-Spring 的核心。作为 SqlSession 的一个实现,这意味着可以使用它无缝代替你代码中已经在使用的 SqlSession。SqlSessionTemplate 是线程安全的,可以被多个 DAO 或映射器所共享使用。
#1编写dao接口
com.hualinux.stu.StuDao.java代码
package com.hualinux.stu;
public interface StuDao {
public Stu findStuBySid(String sid) throws Exception;
}
#2 编写dao实现类
package com.hualinux.stu;
import org.mybatis.spring.support.SqlSessionDaoSupport;
public class UserDAOImpl extends SqlSessionDaoSupport implements StuDao {
@Override
public Stu findStuBySid(String sid) throws Exception {
// 继承 SqlSessionDaoSupport 类,通过 this.getSqlSession() 得到 sqlSession
return getSqlSession().selectOne("com.hualinux.stu.mapper.StuMapper.findUserById",sid);
}
}
3.3.5 编写main方法
com.hualinux.stu.MainOfStu.java
package com.hualinux.stu;
import com.hualinux.stu.mapper.StuMapper;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainOfStu {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(StuConf.class);
StuMapper stuMapper = (StuMapper) ctx.getBean("stuMapper");
Stu stu = stuMapper.getStu("1");
System.out.println("学号:"+stu.getSid()+"\n名字:"+stu.getName()+"\n语文:"+
stu.getYuWen()+ "\n数学:"+stu.getShuXue());
}
}
3.3.6 运行main方法
运行上面的com.hualinux.stu.MainOfStu.java,结果如下:
3.4 查询学生表的所有学生
上面的源代码不变,直接进行修改就行了,修改如下:
#1 映射器接口添加方法
com.hualinux.stu.mapper.StuMapper.java
//查询所有学生
@Select("SELECT sid,NAME,yuWen,shuXue FROM stu")
List<Stu> getStuAll();
完整代码如下:
package com.hualinux.stu.mapper;
import com.hualinux.stu.Stu;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface StuMapper {
@Select("SELECT sid,NAME,yuWen,shuXue FROM stu WHERE sid = #{sid}")
Stu getStu(String sid);
//查询所有学生
@Select("SELECT sid,NAME,yuWen,shuXue FROM stu")
List<Stu> getStuAll();
}
#2 Dao使用此方法
com.hualinux.stu.UserDAO.java
package com.hualinux.stu;
import java.util.List;
public interface StuDao {
public Stu findStuBySid(String sid) throws Exception;
public List<Stu> findStuAll();
}
com.hualinux.stu.UserDAOImpl.java
package com.hualinux.stu;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.util.List;
public class UserDAOImpl extends SqlSessionDaoSupport implements StuDao {
@Override
public Stu findStuBySid(String sid) throws Exception {
// 继承 SqlSessionDaoSupport 类,通过 this.getSqlSession() 得到 sqlSession
return getSqlSession().selectOne("com.hualinux.stu.mapper.StuMapper.findUserById",sid);
}
@Override
public List<Stu> findStuAll() {
return getSqlSession().selectList("com.hualinux.stu.mapper.StuMapper.getStuAll()");
}
}
#3 修改一下主入口代码
com.hualinux.stu.MainOfStu.java
package com.hualinux.stu;
import com.hualinux.stu.mapper.StuMapper;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.Iterator;
import java.util.List;
public class MainOfStu {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(StuConf.class);
StuMapper stuMapper = (StuMapper) ctx.getBean("stuMapper");
/* Stu stu = stuMapper.getStu("1");
System.out.println("学号:"+stu.getSid()+"\n名字:"+stu.getName()+"\n语文:"+
stu.getYuWen()+ "\n数学:"+stu.getShuXue());*/
List<Stu> stus = (List<Stu>) stuMapper.getStuAll();
Iterator<Stu> it = stus.iterator();
System.out.println("学号--名字---语文---数学");
while (it.hasNext()) {
Stu stu = it.next();
System.out.println(stu.getSid()+ "---" +stu.getName() + "----"+stu.getYuWen() + "---" + stu.getShuXue());
}
}
}
运行一下MainOfStu.java,结果如下:
学号--名字---语文---数学
1---张三----51.0---65.0
2---李四----71.0---0.0
3---王五----87.6---90.0
4---陈六----55.9---88.0
0---谢九----77.0---59.0
6---天天----45.0---90.0
7---开心----70.0---100.0
8---乐儿----65.0---50.0
9---乐乐----88.0---29.5
10---笑笑----73.0---69.0
11---fly----90.0---89.0
12---乐天----90.0---70.0
13---云儿----95.0---65.0
14---伊洛----14.0---70.0
15---abc----86.0---98.0
16---菲菲----90.0---99.0
17---mm----71.0---61.0
18---lilei----98.0---61.0
19---hua----90.0---99.5
附录一、创建mysql数据
我这里使用mysql创建一个名为hua和stu的学生表,比较简单
CREATE DATABASE /*!32312 IF NOT EXISTS*/`hua` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `hua`;
DROP TABLE IF EXISTS `stu`;
CREATE TABLE `stu` (
`id` INT(6) UNSIGNED NOT NULL AUTO_INCREMENT,
`sid` VARCHAR(6) NOT NULL,
`name` VARCHAR(10) NOT NULL,
`yuWen` FLOAT DEFAULT '0',
`shuXue` FLOAT DEFAULT '0',
`sex` CHAR(2) NOT NULL DEFAULT '男',
`zhiWei` CHAR(6) NOT NULL DEFAULT '学生',
PRIMARY KEY (`id`),
UNIQUE KEY `sid` (`sid`)
) ENGINE=INNODB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
/*Data for the table `stu` */
INSERT INTO `stu`(`id`,`sid`,`name`,`yuWen`,`shuXue`,`sex`,`zhiWei`) VALUES
(1,'1','张三',51,65,'男','学生'),
(2,'2','李四',71,0,'男','学生'),
(3,'3','王五',87.6,90,'男','学生'),
(4,'4','陈六',55.9,88,'男','学生'),
(5,'0','谢九',77,59,'男','学生'),
(6,'6','天天',45,90,'男','学生'),
(7,'7','开心',70,100,'女','学生'),
(8,'8','乐儿',65,50,'女','音乐委'),
(9,'9','乐乐',88,29.5,'女','学生'),
(10,'10','笑笑',73,69,'女','学生'),
(11,'11','fly',90,89,'男','学生'),
(12,'12','乐天',90,70,'男','副班长'),
(13,'13','云儿',95,65,'女','学生'),
(14,'14','伊洛',14,70,'男','班长'),
(15,'15','abc',86,98,'男','学生'),
(16,'16','菲菲',90,99,'女','学习委'),
(17,'17','mm',71,61,'女','学生'),
(18,'18','lilei',98,61,'男','学生'),
(19,'19','hua',90,99.5,'男','学生');
附录二、MyBatis的SqlSession常用方法
sqlSesion常用 的方法如下:
➢int insert(String statement)。插入方法,参数statement是在配置文件中定义的sinscrt..>.元素的id,返回执行SQL语句所影响的行数。
➢int insert(String statement,Object parameter)。插入方法,参数statement是在配置文件中定义的<insert../>元素的id, parameter是插入所需的参数,通常是对象或者Map,返回执行SQL语句所影响的行数。
➢int update(String statement)。 更新方法,参数statement是在配置文件中定义的<update...>元素的 id,返回执行SQL语句所影响的行数。
➢int update(String statement,Object parameter)。更新方法,参数statement是在配置文件中定义的<uplate../>.元素的id, parameter是插入所需的参数,通常是对象或者Map,返回执行SQL语句所影响的行数。
➢int delete(String statement)。删除方法,参数statement是在配置文件中定义的<delete../>元素的id.返回执行SQL语句所影响的行数。
➢int delete(String statement,Object parameter)。删除方法,参数staterment是在配置文件中定义的<delete../>元素的id, parameter是插入所需的参数,通常是对象或者Map,返回执行SQL语句所影响的行数。
➢<T> T selectOne(String statement)。查询方法,参数statement是在配置文件中定义的<select../>元素的id。返回执行SQL语句查询结果的泛型对象,通常查询结果只有一条数据时才使用。
➢<T> T selectOne(String statement,Object parameter)。 查询方法,参数statement是在配置文件中定义的<select.../>元素的id, parameter 是查询所需的参数,通常是对象或者Map,返回执行SQL语句查询结果的泛型对象,通常查询结果只有一条数据时才使用。
➢<E> List<E> selectL ist(String statement)。 查询方法,参数是在配置文件中定义的<select../>元素的id,返回执行SQL语句查询结果的泛型对象的集合。
➢<E> List<E> selectl ist(String statement,Object parameter)。查询方法,参数statement是在配置文件中定义的<select.../>.元素的id, parameter 是查询所需的参数,通常是对象或者Map,返回执行SQL语句查询结果的泛型对象的集合。
➢<E> List<E> selectList(String statement,Object parameter,RowBounds rowBounds)。查询方法,参数statement是在配置文件中定义的<select..>元素的id, parameter 是查询所需的参数,通常是对象或者Map。RowBounds对象用于分页,它的两个属性: offset指查询的当前页数;limit指当前页显示多少条数据。返回执行SQL语句查询结果的泛型对象的集合。
➢<K,V> Map<K,V> selectMap(String statement,String mapKey)。 查询方法,参数statement是在配置文件中定义的select..>元素的id, mapKey 是返回数据的其中-一个列名,执行SQL语句查询的结果将会被封装成-一个Map集合返回,key 就是参数mapKey传入的列名,value 是封装的对象。
➢<K,V> Map<K,V> selectMap(String statement,Object parameter, String mapKey)。查询方法,参数statement是在配置文件中定义的<elect.. />元素的id, parameter 是查询所需的参数,通常是对象或者Map, mapKey 是返回数据的其中一个列名,执行SQL语句查询的结果将会被封装成一一个Map集合返回,key就是参数mapKey传入的列名,value是封装的对象。
➢<K,V> Map<K,V>selectMap(String statement,Object parameter,Sring mapKey, RowBounds rowBounds)。查询方法,参数staterment是在配置文件中定义的<select../>.元素的id,parameter是查询所需的参数,通常是对象或者Map, mapKey 是返回数据的其中一个列名,RowBounds 对象用于分页。执行SQL语句查询的结果将会被封装成- -个Map集合返回,key 就是参数mapKey传入的列名,value 是封装的对象。
➢void select(String statement,ResultHandler handler)。查询方法,参数statement是在配置文件中定义的<elct..>元素的id, ResultHandler对象用来处理查询返回的复杂结果集,通常用于多表查询。
➢void select(String statement,Object parameter,ResultHandler handler)。查询方法,参数statement是在配置文件中定义的<select../>元素的id, parameter 是查询所需的参数,通常是对象或者Map, ResultHandler 对象用来处理查询返回的复杂结果集,通常用于多表查询。
➢void select(Sring statement,Object parameter,RowBounds rowBounds, ResultHandler handler)。查询方法,参数statement是在配置文件中定义的<select../>元素的id,parameter是查询所需的参数,通常是对象或者Map, RowBounds 对象用于分页,ResultHandler对象用来处理查询返回的复杂结果集,通常用于多表查询。
➢void commit)。提交事务。
➢void rllback)。 回滚事务。
➢void close)。关闭SqlSession对象。
➢Connection getConnection()。获得JDBC的数据库连接对象。
➢<T> T getMapper(Class<T> type)。 返回mapper接口的代理对象,该对象关联了SlSession对象,开发者可以通过该对象直接调用方法操作数据库,参数type是Mapper的接口类型。MyBatis 官方手册建议通过mapper对象访问MyBatis.