首先,来个项目全景预览,文章尾部附上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文件中,需要用转义为&amp;)

<?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&amp;characterEncoding=utf-8&amp;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入门(附源码压缩包下载)的更多相关文章

  1. wpf 模拟抖音很火的罗盘时钟,附源码,下载就能跑

    wpf 模拟抖音很火的罗盘时钟,附源码 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~  错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了就用wpf, ...

  2. CentOS6.6系统源代码安装mysql5.5.28教程(附源码包下载地址)+sysbench的安装

    mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器,具体的cmake编译参数可以参考mysql官网文档(※ 非常重要) http://dev.mysql.com/ ...

  3. [小工具] Command-line CPU Killer(附源码及下载链接)

    博主有次在拆卸自己的笔记本电脑后,发现电脑如果静置时间长了有时会重启,但奇怪的是当我自己在电脑前工作的时候从来没有重启过.据此推测可能 CPU 完全空闲的时候风扇完全停转了,虽然 CPU 温度不高,但 ...

  4. SpringBoot整合Redis、mybatis实战,封装RedisUtils工具类,redis缓存mybatis数据 附源码

    创建SpringBoot项目 在线创建方式 网址:https://start.spring.io/ 然后创建Controller.Mapper.Service包 SpringBoot整合Redis 引 ...

  5. (附源码gitHub下载地址)spring boot -jta-atomikos分布式事务

    应用场景:双数据源,就是某些项目会涉及到两个数据源或者两个以上的数据源,这个多数据源的项目一般是数据同步,也就是把数据从另一个系统中,保存到另一个系统,两边的 数据库又不一样,比如一个Mysql.一个 ...

  6. arcgis api 3.x for js 入门开发系列批量叠加 zip 压缩 SHP 图层优化篇(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  7. openlayers4 入门开发系列之地图导航控件篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  8. openlayers4 入门开发系列结合 echarts4 实现散点图(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  9. openlayers5-webpack 入门开发系列结合 echarts4 实现散点图(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

随机推荐

  1. STL 迭代器适配器(iterator adapter)

    iterator adapter graph LR iterator --- reverse_iterator iterator --- Insert_iterator iterator --- io ...

  2. quartz任务调度的详解

    1.Quartz包含3个核心(调度器.作业类.触发器) (1).作业类:只需要实现org.quartz.job接口,同时包含里面的一个方法体execute()[这是被调度的作业体] (2).调度器:是 ...

  3. CentOS7 修复MBR引导

    为了达到实验目的,首先破坏MBR引导bootloader 重启系统发现系统进不去了,这正是我们想要的 重启进入系统救援模式,输入以下命令重建MBR引导bootloader 重启,可以正常引导进入系统

  4. HDFS数据流——读数据流程

    HDFS读数据流程 假设客户端请求下载文件/user/atguigu/ss.avi,HDFS读数据流程如下: 1)客户端向namenode请求下载文件,namenode通过查询元数据,找到文件所有文件 ...

  5. 错排问题 && 洛谷 P1595 信封问题

    传送门 一道裸的错排问题 错排问题 百度百科上这样说 就是对于一个排列,每一个数都不在正确的位置上的方案数.n 个元素的错排数记为 D(n). 公式 D(n)=(n−1)∗(D(n−2)+D(n−1) ...

  6. Python内建函数reduce()用法

    reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,下面讲述Python内建函数reduce()用法. ...

  7. 引入maven以外的jar包

    这里有2个案例,需要手动发出Maven命令包括一个 jar 到 Maven 的本地资源库. 要使用的 jar 不存在于 Maven 的中心储存库中. 您创建了一个自定义的 jar ,而另一个 Mave ...

  8. C#linq计算总条数并去重复的写法

    一,在实际需求中我们会存在选出了一个集合,而这时我们需要通过集合的某几个字段来计算重复,和统计重复的数量,这时我们可以用到linq来筛选和去重复. 二,如下代码: using System; usin ...

  9. win32 socket 编程(六)——UDP

    基于 UDP 无连接的 socket 编程 一.服务器端操作流程 1.1加载套接字库(WSAStartup) 1.2 创建套接字  (socket) 1.3将创建的套接字绑定到一个本地地址和端口上   ...

  10. 利用反射优化Servlet抽象出父类BaseServlet

    在编写servlet的时候发现每个servlet里面的doPost方法都如: protected void doPost(HttpServletRequest request, HttpServlet ...