操作系统是deepin,环境是IDEA2018.03终极版(注:终极版才有Web开发功能,mybatis可以用在网页端及java普通项目)
步骤
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
。
新建maven项目
打开IDEA,创建新的项目,后点NEXT
groupID与下面的ArtifactID项目名任意
项目 名:下一步完成
完成后的工作目录
配置开发环境
由于开发mybatis需要用到专门的jar包,可以从本地上传,或者是用Idea下载。这里采用后者
在这里我把原先自带的src文件夹删掉。(删掉是因为在新建的一个maven能直接继承父项目的属性,养成良好的编程习惯很重要哦)
新建一个module。在项目上右键
这里新建的一个名为testDemo
可以看到,新建下来的项目pom.xml文件里面有parent属性,这就是刚刚删除了src,新建后的妙用。
导入依赖
打开testDemo目录下的pom.xml文件,导入依赖。一个是mysql连接驱动包,一个是mybatis包。写好之后就能看到底下的进度条在从镜像源里面下载
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>
整个文件结构.在代码没有红色的标记的时候就已经没有问题了,可以进行下一步
下载好后在IDea右边能看到maven,点进去在dependencies里面能看到下载导进来的包。如果没有显示的话点左上角的刷新
数据库结构
到这里正式的准备工作已经完成了,现在正式开始mybatis的代码阶段。
添加mybatis的配置文件mybatis-config.xml。添加方式,在resources右键-添加file-输入文件名回车。
根据自己的数据库信息来填用户密码
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="xfn123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/usermapper.xml"/>
</mappers>
</configuration>
添加实体类
实体类是mybatis查询和操作的类,里面的字段要跟数据库里面一一对应。注意类型
dao.user
package dao;
public class user {
int id;
String name;
String pwd;
public user(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public user() {
}
@Override
public String toString() {
return "user{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
定义操作users表的sql映射文件userMapper.xml
建一个mapper包专门用于存放sql映射文件,在该目录下新建一个接口文件,里面包含了映射文件能引用的方法名。
并在包中创建一个userMapper.xml文件,如下图所示:
package mapper;
import dao.user;
import java.util.List;
public interface usermapper {
List<user> userlist();
}
接口文件定义了一个userlist方法,返回的是user的泛型列表,用于装所有的user表里面的信息。
usermapper.xml文件
其中select id指的是在接口文件中定义的方法,resultType返回值就是我们的dao文件了,user。这里要写全限定名,要加上包名。在namespace里面,直接把它写到mapper所在的路径,我们这里是一个接口。
更简单的,我们直接认为只有在namesqace被限定的文件
,下面的id才能够用它的方法。只要接口里面有对应的方法,我们的namespace就应该选它。
<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为userlist,id属性值必须是唯一的,不能够重复。就是刚刚在usermapper接口里面定义的方法名。
resultType="dao.user"就表示将查询结果封装成一个user类的对象返回
user类就是user表所对应的实体类
-->
<!--
根据id查询得到一个user对象
-->
<mapper namespace="mapper.usermapper">
<select id="listuser" resultType="dao.user">
select * from user;
</select>
</mapper>
修改mybatis-config.xml
只需要将方框里面的代码加入到配置文件中即可,这里需要说明的一点是resource里面的路径要加上后缀.xml
<mappers>
<mapper resource="mapper/usermapper.xml"/>
</mappers>
定义一个工具类
工具类的好处就是封装一些重复的代码,在需要这些代码的时候只需要调用它就可以了。
我们新建一个util包,在util 包里面新建一个mybatisUtil
package util;
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 java.io.IOException;
import java.io.InputStream;
public class mybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}
测试
新建测试类。idea中,有专门用来测试的test文件夹,在里面按照自己的路径对应 。当然这只是种编程习惯。看到注解,@Test
userdaotest
public class userdaotest {
@Test
public void test(){
//第一步获取sqlSession
SqlSession sqlSession = mybatisUtil.getSqlSession();
//执行sql
usermapper mapper = sqlSession.getMapper(usermapper.class);
List<user> listuser = mapper.listuser();
for (user user : listuser) {
System.out.println(user);
}
}
}
结果
成功出来结果