运行环境:
数据库:Mysql
数据库管理工具:Navicat for MySQL
Java IDE:MyEclipse
框架:Mybatis-3.2.8
大三狗暑假被学校要求做项目,后端要用到Java的SSM框架(Spring,Spring MVC,Mybatis)
下面简单用Mybatis框架实现增删改操作。
1.先用MyEclipse新建一个Web项目,然后导入JDBC包和Mybatis-3.2.8包
项目结构 导入两个包后
2.创建相应的包和创建mybatis-config.xml文件
接下来要编写mybatis-config.xml文件,这个文件怎么写?我们查看一下Mybatis的官网
把示例的代码负责到mybatis-config.xml文件中,并根据自己的数据库把参数修改一下。
数据库名:shop
encironments标签下可以配置多个数据库,可以适应多种环境。
例如:开发,测试和生产环境需要不同的配置
3.编写SQLSessionUtil类
package com.ly.util;
import java.io.IOException;
import java.io.Reader;
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 SQLSessionUtil {
private static SqlSessionFactory factory=null;
// static
static Reader read=null;
static{
String config="mybatis-config.xml";
try {
read= Resources.getResourceAsReader(config);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @return
* 单例设计模式,只得到一个工厂对象
*/
private static SqlSessionFactory getSqlSessionFacory(){
if(factory==null){
factory =new SqlSessionFactoryBuilder().build(read);
}
return factory;
}
/***
* 封装一个得到 SqlSession的对象
*
*/
public static SqlSession getSqlSession(){
return getSqlSessionFacory().openSession();
}
}
这里用到了单例模式,一般都是只用到一个工厂对象。
4.在包entity下编写User.java实体
对应的实体类:
package com.ly.entity;
/***
*
* @author HDLB601T1 封装用户数据
*/
public class User {
private int id;
private String user;
private String pwd;
/**
* status:1代表正常 2代表离职
*/
private int status;
/**
* 角色: 1:普通人员 2:管理员 3:超级管理员
*/
private int role;
public User(int id, String user, String pwd, int status, int role) {
super();
this.id = id;
this.user = user;
this.pwd = pwd;
this.status = status;
this.role = role;
}
public User() {
super();
}
public User(String user, String pwd, int status, int role) {
super();
this.user = user;
this.pwd = pwd;
this.status = status;
this.role = role;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public int getRole() {
return role;
}
public void setRole(int role) {
this.role = role;
}
@Override
public String toString() {
return "User [id=" + id + ", user=" + user + ", pwd=" + pwd + ", status=" + status + ", role=" + role + "]";
}
}
5.在mapping包下编写user.xml
<?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.ly.mapping">
<resultMap type="com.ly.entity.User" id="UserList">
<id column="id" property="user" />
<result column="user" property="user"/>
<result column="pwd" property="pwd"/>
<result column="status" property="status"/>
<result column="role" property="role"/>
</resultMap>
<!-- 通过id查询操作 -->
<select id="getUserById" resultType="com.ly.entity.User" parameterType="int">
select * from user where id=#{id}
</select>
<!-- 查询所有数据操作 -->
<select id="listAll" resultMap="UserList">
select * from user
</select>
<!-- 更新操作 -->
<update id="updateUser" parameterType="com.ly.entity.User">
update user set user=#{user},pwd=#{pwd},status=#{status},role=#{role} where id=#{id}
</update>
<!-- 删除操作 -->
<delete id="deleteById" parameterType="int">
delete from user where id=#{id}
</delete>
<!-- 插入操作 -->
<insert id="insertUser" parameterType="com.ly.entity.User">
insert into user values(null,#{user},#{pwd},#{status},#{role})
</insert>
</mapper>
然后再刚刚“先不用理”那里把mappers改成如下:
<mappers>
<mapper resource="com/ly/mapping/user.xml" />
</mappers>
6.用单元测试来测试是否能对数据库操作成功
在test包下创建TestMybatis.java类。代码如下:
package test;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.ly.entity.User;
import com.ly.util.SQLSessionUtil;
public class TestMybatis {
@Test
public void test() {
// 将主配置文件进行解析
String config = "mybatis-config.xml";
// 用反射机制
InputStream is = TestMybatis.class.getClassLoader().getResourceAsStream(config);
// 得到工厂对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
// 从工厂中拿到我们连接在sqlsession对象
SqlSession sqlSession = factory.openSession();
Object object = sqlSession.selectOne("getUserById", 2);
System.out.println(object);
}
@Test
public void testInsert() {
SqlSession sqlSession = SQLSessionUtil.getSqlSession();
User user = new User("ly", "123", 1, 1);
int num = sqlSession.insert("insertUser", user);
sqlSession.commit();
if (num > 0) {
System.out.println("success");
}
}
@Test
public void test3() {
try {
SqlSession sqlSession = SQLSessionUtil.getSqlSession();
User user = new User(2, "ly", "ly", 1, 1);
int num = sqlSession.update("updateUser", user);
sqlSession.commit();
if (num > 0) {
System.out.println("success");
} else {
System.out.println("false");
}
} catch (Exception e) {
System.out.println(e);
}
}
@Test
public void test5(){
SqlSession sqlSession=SQLSessionUtil.getSqlSession();
Object object=sqlSession.selectList("listAll");
if (object!=null) {
List<User> list=(List<User>)object;
for(User user:list){
System.out.println(user);
}
}
}
}
此时的整个项目结构
这里我把所有的测试方法都一起执行了,自己测试的时候可以一个个来
代码下载:链接: https://pan.baidu.com/s/189Ezn0Frt6Z9au5vlBOQ-w 密码: sdh8