前言

数据库从最传统的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&amp;serverTimezone=GMT%2B8&amp;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_环境配置和样例的更多相关文章

  1. HNU_团队项目_数据库设计感想_个人感想

    数据库设计感想  个人的一点心得体会 最重要的放在最前面——讨论开会时的123经验 开会前对会议目的及方式要有所考虑: 不要随意无目的开会: 遵守时间,控制会议时间长度: 会议主持人要维持会议只需,有 ...

  2. HNU_团队项目_出现的Error总结_1

    今天开始记录开发中的Error,实时更新,以10条为一个博客,会给出相应的错误截图和解决方法.数据库框架Mybatis的配置和使用,详见之后发布的相关博客. 之后会对每一个错误进行分析,单独成一篇随笔 ...

  3. HNU_团队项目_需求分析感想(全员)

    以下为软件1701-“洋芋好想飞”的需求分析感想 PM QXS 需求分析过程中的前进与曲折令我深刻地认识到,需求分析是一个动态的过程,而非一个静态的任务结点. 比如最初我们设想可以为用户设定角色,但最 ...

  4. Macaca环境配置及样例执行

    1.Macaca简介 macaca是由阿里巴巴公司开发的一套自动化解决方案,适用于PC端和移动端.Macaca基于Node.js开发,测试案例编写语言暂时也只支持Node.js. 2.Macaca与A ...

  5. Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行(含系列目录)。

    前言: Taurus.MVC 微服务版本已经发布了:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单. 以前都是框架发布时写点相关功能点的文章,没有形成 ...

  6. Spring boot项目maven的profile多环境配置不自动替换变量的问题解决

    Spring boot项目maven的profile多环境配置不自动替换变量的问题解决   在网上找了好久,配置都很简单,可是我的程序就是不能自动替换变量,最终单独测试,发现原来是引用spring b ...

  7. XMPP框架下微信项目总结(1)环境配置

    xmpp介绍 xmpp基于模块开发的 无须自己写请求 (登陆,注册,获取好友列表,添加/删除好友等) ------>简介 ------------------------- ----->工 ...

  8. SSH框架学习环境配置

    1.      java环境 安装 安装jdk7,根据自己的操作系统选择32位或64位安装. 配置 安装后需要配置环境变量,如下所示: 配置classpath,如下: 并在path中添加java6安装 ...

  9. HNU_团队项目_Android和数据库对接出现问题总结

    1. 问题说明:Android发来的数据JSON格式不对,Time和Date的位置相反 出现原因:Android的JSON数据组装时顺序不对(可能) 2.问题说明:Android发来的数据无法插入到数 ...

随机推荐

  1. UVa400 Unix is

    The computer company you work for is introducing a brand new computer line and is developing a new U ...

  2. select ... into outfile备份及恢复使用

    select ... into outfile语句是一种逻辑备份的方法,更准确地说是导出一张表中的数据. Syntax:SELECT    [ALL | DISTINCT | DISTINCTROW ...

  3. New!Devexpress WPF各版本支持VS和SQL Server版本对应图

    点击获取DevExpress v19.2.3完整版试用下载 本文主要为大家介绍DevExpress WPF各大版本支持的VS版本和支持的.Net版本图,Devexpress WPF v19.2.3日前 ...

  4. Django2.1.1与xadmin0.6.0遇到的坑

    Django2.1.1与xadmin0.6.0遇到的坑 BlueMiaomiao关注4人评论11188人阅读2018-09-23 12:17:56 (1)django2.0把from django.c ...

  5. 高并发下的Nginx优化

    高并发下的Nginx优化 2014-08-08 13:30 mood Nginx    过去谈过一些关于Nginx的常见问题; 其中有一些是关于如何优化Nginx. 很多Nginx新用户是从Apach ...

  6. robotframework 获取坐标

    Get Horizontal Position  获取X轴坐标 Get Vertical Position      获取Y轴坐标 Get Element Size          获取整个图表的高 ...

  7. vue项目,百度地图api高亮选取区域,高亮某个地区,行政区域等

    效果如下: var blist = [] ,maxZoom: });// 创建地图实例 var point = new window.BMap.Point(89.48,31.57); map.cent ...

  8. [PWN]fsb with stack frame

    0x00: 格式化字符串漏洞出现的时间很早了,偶然在前一段时间学到了一个其他的利用姿势,通过栈桢结构去利用格式化字符串漏洞. 原文链接:http://phrack.org/issues/59/7.ht ...

  9. cookbook 10.1生成随机密码

    任务: 随机地创造出新密码.比如,有时需要给新的用户账号分配新的密码. 解决方案: from random import choice import string def GenPasswd(leng ...

  10. matplotlib(一):散点图

    import numpy as np import matplotlib.pyplot as plt #产生测试数据 # x,y为数组 N = 50 x = np.random.rand(N) y=n ...