Mybatis入门(附源码压缩包下载)
首先,来个项目全景预览,文章尾部附上Demo下载链接

【1】pom.xml配置(加入jar包)
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zyq</groupId>
<artifactId>test</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>test Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
</dependencies>
<build>
<finalName>test</finalName>
</build>
</project>
【2】创建对象实体User.java
package com.zyq.entity;
public class User {
private int id;
private String name;
private String phone;
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPhone() {
return phone;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", phone=" + phone + "]";
}
}
【3】创建Dao层接口
package com.zyq.dao;
import java.util.List;
import com.zyq.entity.User;
public interface UserDao {
/**
* 获取所有用户
*/
List<User> getUserList();
/**
* 获取单个用户
*/
User getUserById(int id);
/**
* 添加用户
*/
void addUser(User user);
/**
* 更新用户
*/
void updateUser(User user);
/**
* 删除单个用户
*/
void deleteUserById(int id);
}
【4】mapper.xml配置(每个语句id与Dao层接口名称需要保持一致,parameterType="user" 中的user是取的别名,详见【5】)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zyq.dao.UserDao">
<!-- 查询用户 -->
<select id="getUserList" resultType="user">
SELECT * FROM user
</select>
<!-- 查询所有用户 -->
<select id="getUserById" parameterType="int" resultType="user">
SELECT * FROM user WHERE id = #{id}
</select>
<!-- 新增用户 -->
<insert id="addUser" parameterType="user">
INSERT INTO user (id, name, phone) VALUES (#{id}, #{name}, #{phone})
</insert>
<!-- 修改用户 -->
<update id="updateUser" parameterType="user">
UPDATE user SET name=#{name}, phone=#{phone} WHERE id=#{id}
</update>
<!-- 删除用户 -->
<delete id="deleteUserById" parameterType="int">
DELETE FROM user WHERE id=#{id}
</delete>
</mapper>
【5】mybatis-config.xml配置(主要用于加载数据源信息,特别说明:数据源中的url本来是用&链接,但在xml文件中,需要用转义为&)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 别名 -->
<typeAliases>
<typeAlias type="com.zyq.entity.User" alias="user"/>
</typeAliases>
<!-- 数据源 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="zyq123"/>
</dataSource>
</environment>
</environments>
<!-- 加载mapper文件 -->
<mappers>
<mapper resource="mapper.xml"/>
</mappers>
</configuration>
【6】MySessionFactory(创建session,与数据库发生交互)
package com.zyq.until; import java.io.InputStream; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MySessionFactory { private static String mybatisResource = "mybatis-config.xml";
private static SqlSessionFactory sqlSessionFactory; public static SqlSessionFactory getSqlSessionFactory() throws Exception{
if (sqlSessionFactory == null) {
InputStream inputStream = Resources.getResourceAsStream(mybatisResource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
return sqlSessionFactory;
} public static SqlSession getSession(){
try {
return getSqlSessionFactory().openSession();
} catch (Exception e) {
e.printStackTrace();
}
return null;
} }
【7】创建表
顺便表中首先插入几条数据用于测试

【8】MybatisTest(测试类。特别说明:这里事务由于回滚,并不会将修改后的数据保存在数据库中)
package test; import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test; import com.zyq.dao.UserDao;
import com.zyq.entity.User;
import com.zyq.until.MySessionFactory; public class MybatisTest { private SqlSession session;
private UserDao userDao; @Before
public void initSession() {
session = MySessionFactory.getSession();
userDao = session.getMapper(UserDao.class);
} /**
* 单元测试 :根据ID查询用户
*/
@Test
public void getUserByIdTest(){
int id = 1;
User user = userDao.getUserById(id);
if (user != null) {
System.out.println(user.toString());
} else {
System.out.println("不存在id=" + id + "的用户!");
}
} /**
* 单元测试 :获取所有用户
*/
@Test
public void getUserListTest(){
List<User> users = userDao.getUserList();
if (users != null && !users.isEmpty()) {
for (User user : users) {
System.out.println(user.toString());
}
} else {
System.out.println("当前数据库无用户!");
}
} /**
* 单元测试 :添加用户
*/
@Test
public void addUserTest(){
User user = new User();
user.setId(101);
user.setName("诸葛亮");
user.setPhone("13256565656");
userDao.addUser(user);
// 检测新增是否成功
User check = userDao.getUserById(user.getId());
session.commit(); // 这一句释放开会提交记录到数据库,注释则不会,下同
if (check != null) {
System.out.println("添加成功!");
} else {
System.out.println("添加失败!");
}
} /**
* 单元测试:根据ID修改用户信息
*/
@Test
public void updateUserTest(){
int id = 1;
User user = userDao.getUserById(id);
if (user != null) {
// 这里调用了String.format()方法,不明白的请自行百度
System.out.println(String.format("存在id=%s的用户:%s", id, user.toString()));
// 修改内容为在原数据后面加一个"_upd"
user.setName(user.getName() + "_upd");
user.setPhone(user.getPhone() + "_upd");
userDao.updateUser(user);
session.commit();
// 修改后查询对比
User check = userDao.getUserById(id);
System.out.println("修改后的用户:" + check.toString());
} else {
System.out.println(String.format("不存在id=%s的用户!", id));
}
} /**
* 单元测试:根据ID删除用户
*/
@Test
public void deleteUserByIdTest(){
int id = 1;
User user = userDao.getUserById(id);
if (user != null) {
System.out.println("已存在的用户:" + user.toString());
userDao.deleteUserById(id);
session.commit();
// 检测删除是否成功
User check = userDao.getUserById(id);
if (check == null) {
System.out.println("删除成功!");
} else {
System.out.println("删除失败!");
}
} else {
System.out.println("不存在id=" + id + "的用户!");
}
}
}
以上就是一个简单的Mybatis配置及使用过程,
下面附上项目源码下载地址:提取码【5m26】
https://pan.baidu.com/s/1YPWeqUZStArXTzy3cKj9gA
在下载项目导入后你需要注意2点,即可到测试类进行测试:
(1)到数据库中建立一个user表,并插入几条数据,详见【7】
(2)修改数据源,如果是本地的话,则只需要修改用户名(username)和密码(password),详见【5】
Mybatis入门(附源码压缩包下载)的更多相关文章
- wpf 模拟抖音很火的罗盘时钟,附源码,下载就能跑
wpf 模拟抖音很火的罗盘时钟,附源码 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~ 错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了就用wpf, ...
- CentOS6.6系统源代码安装mysql5.5.28教程(附源码包下载地址)+sysbench的安装
mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器,具体的cmake编译参数可以参考mysql官网文档(※ 非常重要) http://dev.mysql.com/ ...
- [小工具] Command-line CPU Killer(附源码及下载链接)
博主有次在拆卸自己的笔记本电脑后,发现电脑如果静置时间长了有时会重启,但奇怪的是当我自己在电脑前工作的时候从来没有重启过.据此推测可能 CPU 完全空闲的时候风扇完全停转了,虽然 CPU 温度不高,但 ...
- SpringBoot整合Redis、mybatis实战,封装RedisUtils工具类,redis缓存mybatis数据 附源码
创建SpringBoot项目 在线创建方式 网址:https://start.spring.io/ 然后创建Controller.Mapper.Service包 SpringBoot整合Redis 引 ...
- (附源码gitHub下载地址)spring boot -jta-atomikos分布式事务
应用场景:双数据源,就是某些项目会涉及到两个数据源或者两个以上的数据源,这个多数据源的项目一般是数据同步,也就是把数据从另一个系统中,保存到另一个系统,两边的 数据库又不一样,比如一个Mysql.一个 ...
- arcgis api 3.x for js 入门开发系列批量叠加 zip 压缩 SHP 图层优化篇(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- openlayers4 入门开发系列之地图导航控件篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- openlayers4 入门开发系列结合 echarts4 实现散点图(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- openlayers5-webpack 入门开发系列结合 echarts4 实现散点图(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
随机推荐
- Java继承:super关键字、构造器、final用法
一.继承 继承好处 1.提高代码的重用性 2.提高代码的扩展性和维护性 3.为多态打下了基础 继承类型 继承子类创建对象的过程 二.super关键字的使用 理解:super代表父类的引用,用于访问父类 ...
- JavaBean简介和要求
JavaBean是一种Java语言写成的可重用组件. 所谓javaBean,是指符合如下标准的Java类: 类是公共的 有一个无参的公共的构造器 有属性,且有对应的get.set方法 用户可以使用Ja ...
- hdu-2819.swap(二分匹配 + 矩阵的秩基本定理)
Swap Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- CopyOnWriteArrayList详解
可以提前读这篇文章:多读少写的场景 如何提高性能 写入时复制(CopyOnWrite)思想 写入时复制(CopyOnWrite,简称COW)思想是计算机程序设计领域中的一种优化策略.其核心思想是,如果 ...
- 【CF321E】+【bzoj5311】贞鱼
决策单调性 + WQS二分 我们首先列出转移式: \(f[i]=Min(f[j]+Sum[j+1 , i])\) 首先我们考虑如果让一段区间的小鱼在一起的代价怎么预处理,我们可以对于一个上三角矩阵求个 ...
- Python之路-Python常用模块-time模块
一.time模块 常用的一种获取当前时间以及时间格式化的模块,模块名称:time time模块在Python原生安装中就存在所以不需要进行任何安装操作,直接使用即可. 导入方式: import tim ...
- python OpenCV视频的读取及保存
import cv2 cap = cv2.VideoCapture('rtsp://admin:hik12345@192.168.3.160/Streaming/Channels/1') fourcc ...
- load 和 initialize 的区别
官方文档 Apple的官方文档很清楚地说明了 initialize 和 load 的区别在于: load 是只要类所在文件被引用就会被调用,而 initialize 是在类或者其子类的第一个方法被调用 ...
- python之流程控制升级
python之流程控制:if elif else while for 一.流程控制之if: 1.1为什要有if判断:让计算机能像人一样代替人类工作,那么计算机应该有对于事务的读错,真假,是否可行的 ...
- intel vtune 介绍、安装和使用
intel vtune 介绍 https://software.intel.com/en-us/vtune intel vtune 安装包下载地址 https://software.intel.com ...