java连接数据库方式(二):单独使用MyBatis 框架实现

本文介绍如何使用MyBatis框架独立完成数据库连接操作,包括创建BaseMapper类、编写映射文件及配置文件等内容。

在没有与spring 框架集成之前,MyBatis 并没有体现出它的强大,但是比起传统的JDBC还是有所优势的。(但是建议只用于学习mybatis)

1. MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

2. MyBatis 提供了动态sql语句

3. MyBatis 底层封装了JDBC,主要的功能就是实现数据库连接。支持定制化 SQL、存储过程以及高级映射, 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。

MyBatis 实现数据的连接,需要几个步骤:

首先封装个BaseMapper.java,相当于传统JDBC中的BaseDao.java

package com.meetingroom.mapper;

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;

/**
 * MyBatis 的BaseDao
 * @author LIU
 * @version 1.0 2017-10-19
 */
public class BaseMapper {

	/**
	 * 获取session
	 *TODO
	 *LIU
	 * @param path
	 * @return
	 *下午11:31:35
	 */
	public SqlSession getSession(String path){
		Reader reader = null;
		SqlSession session = null;
		try {
			reader = Resources.getResourceAsReader(path);
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			SqlSessionFactory factory = builder.build(reader);
			session = factory.openSession();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				reader.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return session;
	}
	
}

接着再编写对应的映射文件:MeetingMapper.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.meetingroom.mapper.MeetingMapper">

 <select id="getAllCounts" resultType="int">
    select count(id) 
    from meeting
  </select>

  <select id="showAll" parameterType="com.meetingroom.bean.Page" resultType="com.meetingroom.bean.Meeting">
    select id,meeting_name as meetingName,meeting_order as meetingOrder,advance_name as advanceName 
    from meeting order by meeting_order desc 
    limit #{start},#{currCount}
  </select>
 
  <insert id="addMeeting" parameterType="com.meetingroom.bean.Meeting" >
    insert into meeting(meeting_name,meeting_order,advance_name) 
    values(#{meetingName},#{meetingOrder},#{advanceName})
  </insert>
  
</mapper>

往下是数据映射实现类:MeetingMapper.java
查询方法要与映射的id对应上,操作完成后必须要关闭session

package com.meetingroom.mapper.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.meetingroom.bean.Meeting;
import com.meetingroom.bean.Page;
import com.meetingroom.mapper.BaseMapper;
import com.meetingroom.mapper.MeetingMapper;

/**
 * 会议室数据映射实现
 * @author LIU
 * @version 1.0 2017-10-24
 */
public class MeetingMapperImpl extends BaseMapper implements MeetingMapper {

	/**
	 * 配置文件路径
	 */
	String path = "mybatis.xml";
	
	
	/**
	 * 获取所有记录数
	 *TODO
	 *LIU
	 * @return
	 *下午4:05:04
	 */
	@Override
	public int getAllCounts() {
		// TODO Auto-generated method stub
		int result = 0;
		SqlSession session = null;
		try {
			session = getSession(path);
			result = session.selectOne("com.meetingroom.mapper.MeetingMapper.getAllCounts");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			session.close();
		}
		
		return result;
	}

	
	/**
	 * 显示所有会议室信息
	 *TODO
	 *LIU
	 * @return
	 *下午4:05:43
	 */
	@Override
	public List<Meeting> showAll(Page page) {
		// TODO Auto-generated method stub
		List<Meeting> meetingList = null;
		SqlSession session = null;
		try {
			session = getSession(path);
			meetingList = session.selectList("com.meetingroom.mapper.MeetingMapper.showAll", page);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			session.close();
		}
		
		return meetingList;
	}

	
	/**
	 * 增加会议室信息
	 *TODO
	 *LIU
	 * @param meeting
	 * @return
	 *下午4:06:47
	 */
	@Override
	public int addMeeting(Meeting meeting) {
		// TODO Auto-generated method stub
		int result = 0;
		SqlSession session = null;
		try {
			session = getSession(path);
			result = session.insert("com.meetingroom.mapper.MeetingMapper.addMeeting", meeting);
			session.commit();
		} catch (Exception e) {
			session.rollback();
			e.printStackTrace();
		}finally{
			session.close();
		}
		
		return result;
	}

}

最后写mybatis.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>
  <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:///meetingroom"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/meetingroom/mapper/MeetingMapper.xml"/>
  </mappers>
</configuration>

项目目录结构:

这里写图片描述

感谢您的阅读,欢迎参观我的个人网站:小嗨词典【 https://www.happydict.cn】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值