MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
原本的JDBC代码实在太复杂了,MyBatis可以简化、自动化连接数据库的流程,优点是:
1.新建一个maven项目,并且在其配置文件pom.xml中声明以下依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
2.直接到mvnrepository中搜索mybatis,并且将包导入项目中

持久层的对象是为数据进行持久化的层级。数据持久化就是将数据存储到数据库中,存入到数据库的数据称之为持久化数据,与之相对的瞬时数据则是存在内存中的数据,在内存中的数据只要断电就会消失。因此持久层的类和对象需要和数据库中的表和实体对应起来。而MyBatis则是用于完成持久化工作的持久层框架,Dao层则是用于完成持久化工作的层级。
首先在MySQL数据库中创建一个User表:
CREATE TABLE `User` (
`id` varchar(30) NOT NULL,
`name` varchar(30) NOT NULL,
`psw` varchar(50) NULL,
PRIMARY KEY (`id`)
);
新建一个Maven项目,然后在pom.xml中引入依赖,其依赖配置如下:
<dependencies>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
接下来编写MyBatis核心配置文件,在src->main->resource中新建配置文件,一般命名为mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- configuration核心配置文件 -->
<configuration>
<environments default="development">
<environment id="development">
<!-- 使用何种方式连接 -->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 使用什么驱动 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>a
<!-- useSSL:使用安全链接 useUnicode:使用Unicode编码避免中文乱码
characterEncoding:指定使用UTF-8字符集 -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?
useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
并且在idea中右侧边栏的database中添加mysql数据库,输入正确的端口号、账号密码后完成连接。然后选择scheme,并且勾选mybatis

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。Sql SessionFactory实例是生产SqlSession的工厂,使用的是工厂模式,而SqlSessionFactoryBuilder则是使用了建造者模式,这两种模式详见《设计模式》的内容。我们可以简单理解为:SqlSessionFactoryBuilder 会根据XML的配置建造一个SqlSessionFactory,然后SqlSessionFactory中负责建造各种SqlSession,SqlSession会和指定的pojo层的类联系起来,完成将pojo类和数据库表联系起来的任务。
那么如何创建SqlSessionFactory呢?
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// new一个SqlSessionFactory实例,并且调用其build方法,build方法的参数是一个InputStream
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
使用该方法后,获取到的sqlSessionFactory对象是根据xml或者Configuration配置类配置好的对象,该工厂类中已经包含需要连接到数据库的各种信息。
既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。获取SqlSession的语句如下
SqlSession = sqlSessionFactory.openSession();
我们为了方便测试,可以编写一个工具类用于存放获取sqlSession的操作,命名为mybatisUitl
package com.hch.util;
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 java.io.IOException;
import java.io.InputStream;
public class MyBatisUtils {
static SqlSessionFactory sqlSessionFactory;
static{
try{
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// new一个SqlSessionFactory实例,并且调用其build方法,build方法的参数是一个InputStream
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch(IOException e){
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}
接着编写MyBatis所需的类,首先是pojo类
package com.hch.pojo;
public class User {
private String id;
private String name;
private String psw;
public User(){}
public User(String id, String name, String psw) {
this.id = id;
this.name = name;
this.psw = psw;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return psw;
}
public void setPassword(String password) {
this.psw = password;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", password='" + psw + '\'' +
'}';
}
}
接下来是编写dao层
首先编写dao接口,下面为UserDao接口和他的实现类UserDaoImpl
package com.hch.dao;
import com.hch.pojo.User;
import java.util.List;
public interface UserDao {
List<User> getAllUser();
}
package com.hch.dao;
import com.hch.pojo.User;
import java.util.List;
public class UserDaoImpl implements UserDao{
@Override
public List<User> getAllUser() {
return null;
}
}
现在你可能很想知道 SqlSession 和 Mapper 到底具体执行了些什么操作,这里给出一个基于 XML 映射语句的示例
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace用于将mapper和某个Dao结合起来 -->
<mapper namespace="com.hch.dao.UserDao">
<!--select表示这是一个查询语句-->
<select id="getAllUser" resultType="com.hch.pojo.User">
select * from mybatis.user;
</select>
</mapper>
我们还需要更改config中的配置,在mybatis-config.xml中追加以下内容:
<!-- 一个mapper.xml都需要在Mybatis核心配置文件中注册 -->
<mappers>
<mapper resource="com/hch/dao/UserMapper.xml"/>
</mappers>
MyBatis会根据InputStream读取指定url的配置文件,但是它并不知道各个mapper.xml的位置,因此需要在配置文件中的mapper注册中心里,对每一个需要用到的mapper进行注册,否则会报错
我们分析一下上面的代码,首先,userMapper.xml中的SQL语句规定了返回的对象为User类,此时Mybatis会将User类中的属性和数据库User表中的属性进行一一对应,在执行了对User表的查询后,将查询表中的数据组装成User对象。在userMapper中也用namespace规定了该mapper是和UserDao映射起来的,执行UserDao中对数据的操作函数,就可以执行userMapper中的SQL语句
接下来我们可以进行一些测试了,在Test文件夹下新建测试用例UserDaoTest,
package com.hch.dao;
import com.hch.pojo.User;
import com.hch.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserDaoTest {
@Test
public void test(){
// 获取SqlSession
SqlSession sqlSession = MyBatisUtils.getSqlSession();
// 通过sqlSession获取指定dao类的实现
UserDao userDao = sqlSession.getMapper(UserDao.class);
// 通过dao类中的方法完成对数据库的操作
List<User> userList = userDao.getAllUser();
for (User user:userList) {
System.out.println(user);
}
sqlSession.close();
}
}
另外,旧版的第二种方法如下:
List<User> userList = sqlSession.selectList("com.hch.dao.UserDao.getAllUser");
可以直接传入方法名完成调用,但是并不推荐使用该方法,因为第一种方法使用和指定语句的参数和返回值相匹配的接口(比如 UserDao.class),现在你的代码不仅更清晰,更加类型安全,还不用担心可能出错的字符串字面值以及强制类型转换。
另外maven的资源过滤器可能会导致报错:找不到mybatis-config.xml,如何操作详见:
https://blog.csdn.net/weixin_45434953/article/details/130026538
点击并且执行UserDaoTest,执行成功
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
转自:spring.profiles.active和spring.profiles.include的使用及区别说明下文笔者讲述spring.profiles.active和spring.profiles.include的区别简介说明,如下所示我们都知道,在日常开发中,开发|测试|生产环境都拥有不同的配置信息如:jdbc地址、ip、端口等此时为了避免每次都修改全部信息,我们则可以采用以上的属性处理此类异常spring.profiles.active属性例:配置文件,可使用以下方式定义application-${profile}.properties开发环境配置文件:application-dev
我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa
我无法运行Spring。这是错误日志。myid-no-MacBook-Pro:myid$spring/Users/myid/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/spring-0.0.10/lib/spring/sid.rb:17:in`fiddle_func':uninitializedconstantSpring::SID::DL(NameError)from/Users/myid/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/spring-0.0.10/li
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:FlashMessagesinPartials(Rails3)我正在做MichaelHartl的Railstutorial和listing7.26将flash消息添加到应用程序布局:...">...这很好用。但是,我试图通过在我的部分文件夹中创建一个_flash.html.erb来清理这段代码...">-->...并且比使用......在我的应用程序布局中,我的所有Rspec测试开始失败,每个测试都显示以下消息:Failure/Error:before{visitsignup_path}ActionView: