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 安装包必须安装,上面链接是官网下载 ...
随机推荐
- c++ const 修饰变量位置含义
c++ const 修饰变量位置含义 const 修饰成员变量 const修饰指针变量时: 只有一个const,如果const位于*左侧,表示指针所指数据是常量,也就是指向常量的指针,不能通过解引用修 ...
- exec 命令
source source命令即点(.)命令. 在bash下输入man source,找到source命令解释处,可以看到解释”Read and execute commands from filen ...
- c# ASP.NET MVC easyui-filebox 图片上传和显示
原文:https://www.cnblogs.com/huatao/p/4727398.html https://www.cnblogs.com/weiweithe/p/4363458.html 表单 ...
- JVM Heap Memory和Native Memory
JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory.前者我们比较熟悉,是供Java应用程序使用的:后者也称为C-Heap,是供JVM自身进程使用的.Heap Me ...
- 数据写入到Excel,模板样式复杂
先整理好Excel模板,如: 接下来在程序获取上面整理好的Excel模板并替换关键字就可以了public ActionResult SummaryStatistics() public ActionR ...
- 基于双TMS320C6678+双XC6VSX315T的6U VPX高速数据处理平台
基于双TMS320C6678+双XC6VSX315T的6U VPX高速数据处理平台 一.板卡概述 板卡由我公司自主研发,基于VPX架构,主体芯片为两片 TI DSP TMS320C6678,两片V ...
- 了解Greenplum (2)
一.目的 1. 理解Greenplum中的数据分布策略(random 和 distribution),分析不同分布策略的优劣:2. 理解查询执行中的数据广播和数据重分布,分析在何种情况下选择哪种策略, ...
- CreateProcessAsUser 服务调用
CreateProcessAsUser 函数 如果想通过服务向桌面用户Session 创建一个复杂UI 程序界面,则需要使用CreateProcessAsUser 函数为用户创建一个新进程用来运行相应 ...
- 简要说明 django restframework 的交互式文档
现在为了解决前后端交互沟通的问题,不少框架都推出了相关的swage库, 用起来似乎很是友好. 正好最近在开发一个小项目,想到新项目就用新版本新技术的理念,我下载了restframework 3.7的版 ...
- nginx http正向代理简单配置及systemd 配置
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...