码迷,mamicode.com
首页 > 数据库 > 详细

MyBatis框架入门小案例(关于用mybatis框架对数据库的增删改查)

时间:2018-09-11 23:57:28      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:doctype   lang   commit   res   coding   目录   input   tools   项目   

1.新建一个maven项目,建好相对应的包,在https://mvnrepository.com中导入MyBatis需要的依赖,复制到配置文件中

技术分享图片

 

 2.在resources文件下添加mybatis-config.xml文件和mapper文件夹,mybatis-config.xml是连接mysql的主要配置,mapper文件夹存放的是对数据库增删改查的映射

mybatis-config.xml配置如下:

<?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>
<!--typeAliases用于给类型指定别名-->
<typeAliases>
<!--方式一:type属性是使用完整的类名,alias属性是别名-->
<!--<typeAlias type="edu.nf.mybatis.entity.Users" alias="Users"/>-->
<!-- 方式二:直接给整个实体包定义别名,name属性指定实体类所在的包名,这样会为每一个实体类自动
生成一个别名,而这个 别名就是实体类的类名并且首字母小写-->
<package name="edu.nf.mybatis.entity"/>
</typeAliases>

<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--将所有的mapper映射配置文件加入到mapper配置中-->
<mappers>
<mapper resource="mapper/UsersMapper.xml"/>
</mappers>
</configuration>

实体类:Users
package edu.nf.mybatis.entity;

/**
* 描述:
* 用户实体类
*
* @author lance
* @create 2018-09-10 14:10
*/
public class Users {
/**
* 主键
*/
private String uid;
/**
* 名字
*/
private String userName;
/**
*
*/
public String getUid() {
return uid;
}

public void setUid(String uid) {
this.uid = uid;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}
}
实体类建好后,就可以配置对应的mapper类,
UserMapper.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指定Dao接口的完整类名
mybatis会依据这个接口动态创建一个实现类去实现这个接口
而这个实现类是一个Mapper对象-->
<mapper namespace="edu.nf.mybatis.dao.UserDaoInf">
<!--在mapper里面就可以配置基于mybatis的增删查改的sql映射配置-->
<!--插入操作,id指定UserDao接口中的方法名,
parameterType为指定方法参数的类型,。也可以定义为TypeAlias中定义的别名
useGeneratedKeys属性设置为true表示使用主键自增长
keyProperty属性指定实体中需要自增长的字段名称

sql设置参数的时候使用#{},#{}是一个ognl表达式,(对象图导航语言)
而这里的#{}中指定的实体中的字段名
-->
<insert id="saveUser" parameterType="users" >
insert into user_info(u_id,u_name) values(#{uid},#{userName})
</insert>
<update id="updateUser" parameterType="users">
update user_info set u_name=#{userName} where u_id=#{uid}
</update>
<delete id="deleteUser" parameterType="java.lang.String">
delete from user_info where u_id=#{uid}
</delete>

<!--根据ID来查询某条用户的信息-->
<select id="findUsersById" parameterType="java.lang.String" resultType="users">
select u_id as uid, u_name as userName from user_info where u_id=#{uid}
</select>
<!--查询所有的用户信息-->
<select id="findAll" parameterType="users" resultType="users">
select u_id as uid ,u_name as userName from user_info
</select>
</mapper>

我们还需要一个mybatis的工具类,这个工具类主要 是解析mybatis-config.xml,
 并初始化一个SqlSessionFactory工厂,然后通过这个工厂来创建SqlSession实例。
一个SqlSessionr实例其实就是一个变相的Connection对象
package edu.nf.mybatis.tools;

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;

/**
* 描述:
* mybatis工具类,这个工具类主要 是解析mybatis-config.xml,
* 并初始化一个SqlSessionFactory工厂,然后通过这个工厂来创建SqlSession实例。
* 一个SqlSessionr实例其实就是一个变相的Connection对象
* @author lance
* @create 2018-09-10 10:38
*/
public class MyBatisUtil {
/**声明ggwhSqlSessionFactory*/
private static SqlSessionFactory sqlSessionFactory;
/* 在静态代码块中初始化SqlSessionFactory*/
static{
//找到mybatis-config.xml配置文件,并构建一个输入流
//由于配置文件放在resources目录中,编译后会存放在classpath中
try {
//通过Resources类从classpath中找到xml文件并读取,返回一个InputStream的对象
InputStream is =Resources.getResourceAsStream("mybatis-config.xml");
//通过这个输入流来构建一个SqlSessionFactory对象
//通过上面的输入流传递给builder对象进行解析
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}

/**
* 提供一个获取SqlSession的方法
*
* */
public static SqlSession getSqlSession(){
//openSession方法构建一个sqlSession对象
return sqlSessionFactory.openSession();
}
public static SqlSession getSqlSession(Boolean falg){
//openSession方法构建一个sqlSession对象
return sqlSessionFactory.openSession(falg);
}

}
3.在传统的方法中,我们都是用dao方法来实现对数据库的增删改查的,而mybatis中通常我们会将dao类变成一个接口类,接口中声明对数据库的操作的抽象方法,用一个子类来继承并实现dao类接口所有的方法

技术分享图片

接口类:UserDaoInf

package edu.nf.mybatis.dao;

import edu.nf.mybatis.entity.Users;

import java.util.List;

/**
* @Author lance
* */
public interface UserDaoInf {
/**
* 添加用户
*/
void saveUser(Users users);

/**
* 修改用户
*/
void updateUser(Users users);

/**
* 删除用户
*/
void deleteUser(String uid);

/**
* 根据ID查询某条用户数据
*/
Users findUsersById(String uid);

/**
* 查询所有的用户信息,保存在一个集合中
*/
List<Users> findAll();
}

接口实现类:UserDaoImpl
package edu.nf.mybatis.dao.impl;

import edu.nf.mybatis.dao.UserDaoInf;
import edu.nf.mybatis.entity.Users;
import edu.nf.mybatis.tools.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
* 描述:
* 接口实现类
* @author lance
* @create 2018-09-10 14:13
*/
public class UserDaoImpl implements UserDaoInf {

@Override
public void saveUser(Users user) {
//获取SqlSession实例
SqlSession session = MyBatisUtil.getSqlSession();
try {
//方式一:
//获取相应的Mapper,getMapper方法需要传递一个接口的对象
//并且返回的这个Mapper对象同样是实现了UserDao接口
//这个Mapper对象最核心的作用就是和mybatis的mapper映射配置文件进行关联
UserDaoInf dao = session.getMapper(UserDaoInf.class);
//调用这个实现类的saveUser方法将数据保存在数据库中
dao.saveUser(user);
//方式二:
//bint row = session.insert("edu.nf.mybatis.entity.saveUser",user);
//手动提交事务
session.commit();
} catch (Exception e) {
e.printStackTrace();
//在异常加回滚事务
session.rollback();
}finally {
session.close();
}
}

@Override
public void updateUser(Users users) {
SqlSession session = MyBatisUtil.getSqlSession();
try{
UserDaoInf dao = session.getMapper(UserDaoInf.class);
dao.updateUser(users);
session.commit();
}catch (Exception e){
e.printStackTrace();
session.rollback();
}finally {
session.close();
}
}

@Override
public void deleteUser(String uid) {
SqlSession session = MyBatisUtil.getSqlSession();
try{
UserDaoInf dao = session.getMapper(UserDaoInf.class);
dao.deleteUser(uid);
session.commit();
}catch (Exception e){
e.printStackTrace();
session.rollback();
}finally {
session.close();
}
}

@Override
public Users findUsersById(String uid) {
SqlSession session = MyBatisUtil.getSqlSession();
Users user=null;
try {
UserDaoInf dao = session.getMapper(UserDaoInf.class);
user = dao.findUsersById(uid);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}finally {
session.close();
}
return user;
}

@Override
public List<Users> findAll() {
List<Users> list = null;
SqlSession session = MyBatisUtil.getSqlSession();
try {
UserDaoInf dao = session.getMapper(UserDaoInf.class);
list = dao.findAll();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return list;
}
}

测试类,以下方法都经过测试,没有问题

package eud.nf.mybatis.dao.test;

import edu.nf.mybatis.dao.UserDaoInf;
import edu.nf.mybatis.dao.impl.UserDaoImpl;
import edu.nf.mybatis.entity.Users;
import org.junit.Test;

import java.util.List;

/**
* 描述:
*
* @author lance
* @create 2018-09-10 15:15
*/
public class UserDaoImplTest {
@Test
public void testSaveUsers(){
Users users = new Users();
users.setUid("1010");
users.setUserName("test6");
UserDaoInf dao = new UserDaoImpl();
dao.saveUser(users);
}
@Test
public void testUpdateUsers(){
Users users = new Users();
users.setUid("1006");
users.setUserName("admin");
UserDaoInf dao = new UserDaoImpl();
dao.updateUser(users);
}
@Test
public void testDeleteUsers(){
UserDaoInf dao = new UserDaoImpl();
dao.deleteUser("1010");
}
@Test
public void testFindUsersById(){
UserDaoInf dao = new UserDaoImpl();
Users user = dao.findUsersById("1001");
System.out.println(user.getUid());
System.out.println(user.getUserName());
}
@Test
public void testFindAll(){
UserDaoInf dao = new UserDaoImpl();
List<Users> list = dao.findAll();
for (Users users : list) {
System.out.println(users);
}
}

}
好啦,这就是mybatis的一个简单使用教程啦

 

MyBatis框架入门小案例(关于用mybatis框架对数据库的增删改查)

标签:doctype   lang   commit   res   coding   目录   input   tools   项目   

原文地址:https://www.cnblogs.com/gepuginy/p/9631074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!