前言

数据库从最传统的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层

最新文章

  1. 理解HTML语义化
  2. windows自动修改ip的bat文件
  3. js替换指定字符串
  4. ZooKeeper架构设计及其应用要点
  5. 1、探究java方法参数传递——引用传递?值传递!
  6. 【枚举】Vijos P1496 火柴棒等式 (NOIP2008提高组第二题)
  7. each与list的用法
  8. 小白学Maven第二篇配置Ecilpse
  9. Python爬虫(二十一)_Selenium与PhantomJS
  10. 记录优雅的pythonic代码
  11. 监听 在xshell中
  12. INTRODUCE OF REPRESENTATIVE CPG-CONTROLLED ROBOTS
  13. centos7编译安装lnmp
  14. [Mac]secureCRT私钥转换为mac ssh私钥
  15. Java连接MySQL数据库详细教程(附网盘下载地址)
  16. Java框架之Struts2(四)
  17. tensorRT使用python进行网络定义
  18. JavaEE进阶——全文检索之Solr7.4服务器
  19. Apache服务器301重定向去掉.html和.php
  20. 服务器端FIN的条件

热门文章

  1. linux内核 内存管理
  2. Mybatis关联查询(转载)
  3. TETP服务和PXE功能
  4. 下载Mybatis源码
  5. CodeForces 830B - Cards Sorting
  6. CSS选择器div和p的用法和区别
  7. join on 和group
  8. CSS3 box-sizing:content-box | border-box
  9. CUDA-F-2-1-CUDA编程模型概述2
  10. 使用Jmeter对观影券查询接口做性能测试