mybatis mysql Dao_MyBatis开发Dao层的两种方式实现(原始Dao层开发)

本文详细介绍了如何使用MyBatis 3.2.7版本在Eclipse环境下,结合MySQL数据库开发DAO层。内容涵盖SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession的使用,以及日志配置、映射文件设置、接口实现和JUnit测试。展示了从创建工程、配置文件到实现增删改查的完整流程。
摘要由CSDN通过智能技术生成

本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例。

本次使用的mybatis版本为mybatis-3.2.7,开发工具为eclipse,数据库为mysql,jdk版本jdk1.8.0_151。

SqlSession使用范围

SqlSessionFactoryBuilder

通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory

将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder。

在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。

SqlSessionFactory

通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。

将来mybatis和spring整合后,使用单例模式管理sqlSessionFactory。

SqlSession

SqlSession是一个面向用户(程序员)的接口。

SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)、selectList(返回单个或多个对象)、。

SqlSession是线程不安全的,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。

SqlSession最佳应用场合在方法体内,定义成局部变量使用。

1、首先,使用eclipse新建一个java工程,在lib目录下加入mybatis核心包、依赖包、数据驱动包,然后BuildPath一下。。

2、添加日志文件,在classpath下创建log4j.properties如下:

# Global logging configuration

log4j.rootLogger=DEBUG, stdout

# Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

3、在classpath下创建config资源文件夹,并在config文件夹下创建SqlMapConfig.xml,如下:

/p>

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

SqlMapConfig.xml是mybatis核心配置文件,上边文件的配置内容为数据源、事务管理。

4、创建数据封装使用的User类

package com.xyfer.po;

import java.util.Date;

/**

*

* @author xyfer

* 数据封装使用的User类

*

*/

public class User {

private int id; //id

private String username; //姓名

private String sex; //性别

private Date birthday; // 生日

private String address; // 地址

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public Date getBirthday() {

return birthday;

}

public void setBirthday(Date birthday) {

this.birthday = birthday;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

}

5、在classpath下的资源文件夹sqlmapper目录下创建sql映射文件User.xml:

/p>

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select * from user where id = #{id}

select LAST_INSERT_ID()

insert into user(username,birthday,sex,address)

values(#{username},#{birthday},#{sex},#{address})

update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}

where id=#{id}

delete from user where id=#{id}

6、mybatis框架需要加载映射文件,将Users.xml添加在SqlMapConfig.xml,如下:

7、dao层接口

package com.xyfer.dao;

import com.xyfer.po.User;

public interface UserDao {

public User getUserById(int id); //根据id值查询一个用户

public void insertUser(User user); //新增一个用户

public void updateUser(User user); //修改一个用户

public void deleteUser(int id); //删除一个用户

}

dao层接口实现类

package com.xyfer.dao.impl;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import com.xyfer.dao.UserDao;

import com.xyfer.po.User;

public class UserDaoImpl implements UserDao {

//注入SqlSessionFactory

public UserDaoImpl(SqlSessionFactory sqlSessionFactory){

this.setSqlSessionFactory(sqlSessionFactory);

}

private SqlSessionFactory sqlSessionFactory;

public SqlSessionFactory getSqlSessionFactory() {

return sqlSessionFactory;

}

public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {

this.sqlSessionFactory = sqlSessionFactory;

}

@Override

public User getUserById(int id) {

SqlSession session = sqlSessionFactory.openSession();

User user = null;

try {

//通过sqlsession调用selectOne方法获取一条结果集

//参数1:指定定义的statement的id,参数2:指定向statement中传递的参数

user = session.selectOne("test.findUserById", 1);

System.out.println(user);

} finally{

session.close();

}

return user;

}

@Override

public void insertUser(User user) {

SqlSession sqlSession = sqlSessionFactory.openSession();

try {

sqlSession.insert("test.insertUser", user);

sqlSession.commit();

} finally{

sqlSession.close();

}

}

@Override

public void updateUser(User user) {

SqlSession sqlSession = sqlSessionFactory.openSession();

try {

sqlSession.update("test.updateUser", user);

sqlSession.commit();

} finally{

sqlSession.close();

}

}

@Override

public void deleteUser(int id) {

SqlSession sqlSession = sqlSessionFactory.openSession();

try {

sqlSession.update("test.deleteUserById", id);

sqlSession.commit();

} finally{

sqlSession.close();

}

}

}

8、创建一个JUnit的测试类,对UserDao进行测试。

package com.xyfer.dao.impl;

import static org.junit.Assert.*;

import java.io.InputStream;

import java.util.Date;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.Before;

import org.junit.Test;

import com.xyfer.dao.UserDao;

import com.xyfer.po.User;

public class UserDaoImplTest {

private SqlSessionFactory sqlSessionFactory;

@Before

public void init() throws Exception {

SqlSessionFactoryBuilder sessionFactoryBuilder = new SqlSessionFactoryBuilder();

InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");

sqlSessionFactory = sessionFactoryBuilder.build(inputStream);

}

@Test

public void testGetUserById() {

UserDao userDao = new UserDaoImpl(sqlSessionFactory);

User user = userDao.getUserById(22);

System.out.println(user);

}

@Test

public void testInsertUser() {

User user = new User();

user.setUsername("小李");

user.setSex("男");

user.setBirthday(new Date());

user.setAddress("杭州市");

UserDao userDao = new UserDaoImpl(sqlSessionFactory);

userDao.insertUser(user);

}

@Test

public void testUpdateUser() {

User user = new User();

user.setId(10);

user.setUsername("小威");

user.setSex("男");

user.setBirthday(new Date());

user.setAddress("杭州市");

UserDao userDao = new UserDaoImpl(sqlSessionFactory);

userDao.updateUser(user);

}

@Test

public void testDeleteUser() {

UserDao userDao = new UserDaoImpl(sqlSessionFactory);

userDao.deleteUser(10);

}

}

以上步骤,完成使用mybatis框架开发原始dao层,并对数据库进行增删改查操作。

需要注意的是,上文提到的config文件夹和sqlmapper文件夹均为资源文件夹(source folder),默认会加载该路径下的文件。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值