HNU_团队项目_数据库框架Mybatis_环境配置和样例
前言
数据库从最传统的JDBC连接方式和数据库池化技术到Hibernate的使用,再到Mybatis的快捷轻量级操作,技术迭代的速度飞快。
在了解了基础的理论和方法后,学习前沿编程框架、工具,我认为是一种必然的趋势。
再不看看外面,可能真的要落伍了~
之后,我借团队项目开发的机会,学习了Mybatis框架,和大家分享一下经验,愿意和大家共同进步!
正文
从零开始
参考:Mybatis官方文档
1. 下载Mybatis的jar包,并且导入
点击连接,选择下载Mybatis的jar包。这里有三个文件,基础使用的话,下载第一个mybatis-3.5.3.zip即可,如果需要查看源码的话,建议将Source code也下载下来,Windows使用zip,Ubuntu使用tar.gz;

Eclipse导入只要build puth即可,IDEA的话,在File->Project Structure里导入jar;(建议在项目内建一个lib文件夹,便于迁移)

只是数据库部分的话,以下两个包便足够了。

2. 新建Java Web Application,编写数据库配置文件
文件名可以自定义,我设置的是Mybatis.xml。但是要放到src的根目录下,这一点要注意。
注意:
url的配置信息中 ” & " 符号无法解析,需要变为 “ & ";
映射文件路径以 “ / ”作为文件夹,从src作为根目录进行访问;
<?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">
<!--上面一段是非常重要的,有了这一段,xml的配置就拥有了自动补全,这也是考量Mybatis包是否导入成功的一个方面;-->
<configuration>
<!-- 可以兼容多种数据库,配置多个environment,default为当前配置-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<!-- 使用数据库池化技术,详细可以看官方文档-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/databaseName?useUnicode=true&serverTimezone=GMT%2B8&characterEncoding=utf-8"/>
<property name="username" value=username"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<!-- 映射文件路径,需要告诉数据库,要执行哪些操作,以及数据库实体类和字段的对应关系,接下来进行解释-->
<mappers>
<mapper resource="main/mapper/UserMapper.xml"/>
</mappers>
</configuration>
3. 编写执行SQL语句的SqlSessionFactory
可以编写工具类或者工厂类,避免代码重复。我这里设置的是DBTools.java
package main.dao; 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 javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream; /*
Comet_Fei
2019/11/17
*/
public class DBTools
{
private static SqlSessionFactory sqlSessionFactory; static
{
try
{
//输入流读取文件 Resources Mybatis的自带加载类
InputStream config = Resources.getResourceAsStream("mybatis.xml");
//工厂设计模式
sqlSessionFactory = new SqlSessionFactoryBuilder().build(config);
}
catch (IOException e)
{
e.printStackTrace();
}
} //创建可以执行映射文件sql的sqlsession
public static SqlSession getSqlSession()
{
return sqlSessionFactory.openSession();
}
}
4. 编写表对应的实体类User.java
此处可用IDEA的pojo快捷操作,生成对应实体;
package main.pojo;
public class User {
private String userPhoneNumber;private String userName;private String userPassword;public User(String userPhoneNumber, String userName, String userPassword) {
this.userPhoneNumber = userPhoneNumber;
this.userName = userName;
this.userPassword = userPassword;
}
public String getUserPhoneNumber() {
return userPhoneNumber;
}
public void setUserPhoneNumber(String userPhoneNumber) {
this.userPhoneNumber = userPhoneNumber;
}public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
@Override
public String toString() {
return "User{" +
"userPhoneNumber='" + userPhoneNumber + '\'' +
", userName='" + userName + '\'' +
", userPassword='" + userPassword + '\'' +
'}';
}
}
5. 编写实体管理类映射接口UserMapper.java
UserMapper接口和Mybatis的映射xml文件相对应,便于操作和使用
package main.mapper; import main.pojo.User; import java.util.List; /*
Comet_Fei
2019/11/17
*/
public interface UserMapper
{
int addUser(User user);
User getUser(String userPhoneNumber);
int deleteUser(String userPhoneNumber);
int setPassword(User user);
List<User> listUser(); }
5. 编写映射文件UserMapper.xml
这类文件非常重要,会将数据库表和Java代码的pojo(bean)进行映射,极大的简化了操作步骤,减小代码量。
参数说明:
- resultMap是数据库表和实体的Map映射设置,在使用时,只要加入 resultMap="userResultMap" 参数即可,如select语句;
- parameterType是传入的参数类型,如果传入参数较多的话,可以使用实体类传参,但是要写明实体类全路径;(还没有学习复杂语句,所以这里只是简单介绍)
- resultType是返回值类型,但是不能和resultMap同时存在;
- 传参方式如代码所示,用 ${ } 标识参数,和接口一致;
- namespace是全路径,访问到当前对应Map的接口文件;
- 注意传参的数据类型,如果是字符型或者String,需要用单引号包含,如: '${userName}'
<?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="main.mapper.UserMapper">
<resultMap id="userResultMap" type="main.pojo.User">
<result property="userPhoneNumber" column="user_phone_number"/>
<result property="headPictureId" column="head_pictureId"/>
<result property="rolePowerId" column="role_power_id"/>
<result property="userName" column="user_name"/>
<result property="userPersonalAutograph" column="user_personal_autograph"/>
<result property="userPassword" column="user_password"/>
<result property="userSex" column="user_sex"/>
<result property="userEmail" column="user_email"/>
<result property="userAddress" column="user_address"/>
<result property="userUploadNumbers" column="user_upload_numbers"/>
</resultMap> <!-- 添加用户-->
<insert id="addUser" parameterType="main.pojo.User">
INSERT INTO user(user_phone_number, user_name, user_password)
VALUES ('${userPhoneNumber}', '${userName}', '${userPassword}');
</insert>
<!-- 删除用户-->
<delete id="deleteUser" parameterType="String">
DELETE FROM user WHERE user_phone_number = '${userPhoneNumber}';
</delete> <!-- 获得账号为user_phone_number的用户-->
<select id="getUser" resultMap="userResultMap">
SELECT * FROM user WHERE user_phone_number = '${userPhoneNumber}';
</select> <!-- 获得用户列表-->
<select id="listUser" resultType="main.pojo.User">
SELECT * FROM user;
</select> <!-- 找回密码-->
<update id="setPassword" parameterType="main.pojo.User">
UPDATE user SET user_password = ${userPassword} WHERE user_phone_number = '${userPhoneNumber}';
</update> </mapper>
6. 最后是操作层(DAO)UserDao.java
因为操作层有特定的业务,这里只是一个示意而已。java里面的main函数可以进行局部测试,便于和前端、控制器(servlet)等对接。
package main.dao; import main.mapper.UserMapper;
import main.pojo.User;
import org.apache.ibatis.session.SqlSession; import java.io.IOException; /*
Comet_Fei
2019/11/17
*/
public class UserDao {
// 定义dao内的sqlSession和映射接口mapper
private SqlSession sqlSession;
private UserMapper mapper; public UserDao()
{
// 通过工厂,初始化session;通过特有getMapper设置映射接口
sqlSession = DBTools.getSqlSession();
mapper = sqlSession.getMapper(UserMapper.class);
} //添加用户 成功1 失败0
public int addUser(String userPhoneNumber, String userPassword) throws IOException
{
//用户的 手机号,姓名(默认手机号),密码
User user = new User(userPhoneNumber,userPhoneNumber, userPassword);
int result = mapper.addUser(user);
sqlSession.commit();
System.out.println(result);
return result;
} //用户登录 短信 成功2;失败0
public int right(String userPhoneNumber)
{
int result;
User user = mapper.getUser(userPhoneNumber);
if(user != null)
{
result = 2;//登录成功
}
else
{
result = 0;//登录失败
}
sqlSession.commit();
return result;
} //用户登录 手机 密码 成功2;密码错误1;手机号错误0
public int right(String userPhoneNumber, String userPassword)
{
int result;
User user = mapper.getUser(userPhoneNumber);
if((user != null)&&(userPassword.equals(user.getUserPassword())))
{
result = 2;//登录成功
}
else if(user != null)
{
result = 1;//密码错误
}
else
{
result = 0;//此手机号未注册
}
sqlSession.commit();
return result;
} //删除用户 成功是1,不成功是0
public int deleteUser(String userPhoneNumber)
{
int result = mapper.deleteUser(userPhoneNumber);
sqlSession.commit();
return result;
} //重设密码
public int setPassword(String userPhoneNumber, String userPassword)
{
User user = new User(userPhoneNumber, userPhoneNumber, userPassword);
return mapper.setPassword(user);
}
public static void main(String[] args) throws IOException {
UserDao dao = new UserDao();
// System.out.println(dao.deleteUser("111")); //删除用户
// dao.addUser("111","111");// 添加用户
// System.out.println(dao.right("11"));//短信登录;
// System.out.println(dao.right("111","111"));//短信登录;
System.out.println(dao.setPassword("111","111"));
}
}
以上为全部内容,之后还会写一些关于IDEA操作上的快捷键,如,IDEA如何连接数据库、快速生成pojo实体类等的博客。
如果运行异常,欢迎留言交流,共同进步!
这里特别感谢博客:IDEA项目搭建四——使用Mybatis实现Dao层
HNU_团队项目_数据库框架Mybatis_环境配置和样例的更多相关文章
- HNU_团队项目_数据库设计感想_个人感想
数据库设计感想 个人的一点心得体会 最重要的放在最前面——讨论开会时的123经验 开会前对会议目的及方式要有所考虑: 不要随意无目的开会: 遵守时间,控制会议时间长度: 会议主持人要维持会议只需,有 ...
- HNU_团队项目_出现的Error总结_1
今天开始记录开发中的Error,实时更新,以10条为一个博客,会给出相应的错误截图和解决方法.数据库框架Mybatis的配置和使用,详见之后发布的相关博客. 之后会对每一个错误进行分析,单独成一篇随笔 ...
- HNU_团队项目_需求分析感想(全员)
以下为软件1701-“洋芋好想飞”的需求分析感想 PM QXS 需求分析过程中的前进与曲折令我深刻地认识到,需求分析是一个动态的过程,而非一个静态的任务结点. 比如最初我们设想可以为用户设定角色,但最 ...
- Macaca环境配置及样例执行
1.Macaca简介 macaca是由阿里巴巴公司开发的一套自动化解决方案,适用于PC端和移动端.Macaca基于Node.js开发,测试案例编写语言暂时也只支持Node.js. 2.Macaca与A ...
- Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行(含系列目录)。
前言: Taurus.MVC 微服务版本已经发布了:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单. 以前都是框架发布时写点相关功能点的文章,没有形成 ...
- Spring boot项目maven的profile多环境配置不自动替换变量的问题解决
Spring boot项目maven的profile多环境配置不自动替换变量的问题解决 在网上找了好久,配置都很简单,可是我的程序就是不能自动替换变量,最终单独测试,发现原来是引用spring b ...
- XMPP框架下微信项目总结(1)环境配置
xmpp介绍 xmpp基于模块开发的 无须自己写请求 (登陆,注册,获取好友列表,添加/删除好友等) ------>简介 ------------------------- ----->工 ...
- SSH框架学习环境配置
1. java环境 安装 安装jdk7,根据自己的操作系统选择32位或64位安装. 配置 安装后需要配置环境变量,如下所示: 配置classpath,如下: 并在path中添加java6安装 ...
- HNU_团队项目_Android和数据库对接出现问题总结
1. 问题说明:Android发来的数据JSON格式不对,Time和Date的位置相反 出现原因:Android的JSON数据组装时顺序不对(可能) 2.问题说明:Android发来的数据无法插入到数 ...
随机推荐
- Linux常用命令type、date
Linux命令类型: 内置命令(shell内置):cd is shell builtin 外部命令:命令 is /usr/bin/命令,在文件系统的某个路径下有一个与命令名称相应的可执行文件 type ...
- cefsharp文档
原文链接:https://github.com/cefsharp/CefSharp/wiki/CefSharp中文帮助文档#a1_1 CefSharp中文帮助文档 目录 基础知识 1.1 cefsha ...
- codeforces402B
Trees in a Row CodeForces - 402B The Queen of England has n trees growing in a row in her garden. At ...
- CodeForces 754D Fedor and coupons ——(k段线段最大交集)
还记得lyf说过k=2的方法,但是推广到k是其他的话有点麻烦.现在这里采取另外一种方法. 先将所有线段按照L进行排序,然后优先队列保存R的值,然后每次用最小的R值,和当前的L来维护答案即可.同时,如果 ...
- [CSP-S模拟测试]:最大或(数学)
题目传送门(内部题141) 输入格式 输入文件包含多组测试数据,第一行为一个正整数$T$,表示数据组数. 接下来$T$行,每行两个正整数$l,r$.数据保证$l\leqslant r$成立. 输出格式 ...
- Java中的多线程技术全面详解
本文主要从整体上介绍Java中的多线程技术,对于一些重要的基础概念会进行相对详细的介绍,若有叙述不清晰或是不正确的地方,希望大家指出,谢谢大家:) 为什么使用多线程 并发与并行 我们知道,在单核机器上 ...
- leetcode题目10.正则表达式匹配(困难)
题目描述: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 ...
- Java如何对一个对象进行深拷贝?
在Java语言里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝.浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对象的值也会发生变化.而深拷贝则是拷贝了源对象的所有值,所以即 ...
- rtmp 协议详解
1. handshake 1.1 概述 rtmp 连接从握手开始.它包含三个固定大小的块.客户端发送的三个块命名为 C0,C1,C2:服务端发送的三个块命名为 S0,S1,S2. 握手序列: 客户端通 ...
- git下载fastadmin
mac git下载后,环境配置运行会如下图 一 下载相对应系统的node.js https://nodejs.org/en/download/ 安装就是一直下一步.... 二 指令终端.cd 到对应项 ...