MYBATIS的使用(一【xml方式实现】)

自MYBATIS从BATIS奔向Google后,一直在蜕化,大方向实现分xml和注解Annation。接下来分别为初学者推出xml和注解Annation两种Demo。

一、第一种实现方式:xml

1、Demo结构。


2、配置文件

(1)数据源:jdbc.properties

#******************** 数据库连接属性	*****************************
driver=com.mysql.jdbc.Driver
username=root
password=123
url=jdbc\:mysql\://localhost\:3306/solrdb?characterEncoding\=utf8

(2)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>
    
    <properties resource="jdbc.properties"/>
	
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="com/wrs/mapxml/sysUser.xml" />
	</mappers>
	
</configuration>
(3)日志文件:log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
	
	<!--屏幕打印信息 -->
	<appender name="Console" class="org.apache.log4j.ConsoleAppender">
		<param name="Encoding" value="utf-8" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="[%-5p][%d{yyyy-MM-dd HH:mm:ss.SSS}][%15t]:[%m][%-17C{8}:%4L]%n" />
		</layout>
		<!--限制输出级别 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMax" value="ERROR" />
			<param name="LevelMin" value="INFO" />
		</filter>
	</appender>
	
	<!-- 普通日志 -->  
	<appender name="log" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="./log/log.log" />
		<param name="BufferSize" value="8192"/> 
		<param name="DatePattern" value="'_'yyyy-MM-dd'.log'" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="[%-5p][%d{yyyy-MM-dd HH:mm:ss.SSS}][%10t]:[%m][%-17C{8}:%4L]%n" />
		</layout>
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMax" value="ERROR" />
			<param name="LevelMin" value="INFO" />
		</filter>
	</appender>

	<!-- 异常日志 -->
	<appender name="exception" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="./log/exception.log" />
		<param name="BufferSize" value="8192"/> 
		<param name="DatePattern" value="'_'yyyy-MM-dd'.log'" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%-5p][%d{yyyy-MM-dd HH:mm:ss.SSS}][%10t]:[%m][%-17C{8}:%4L]%n" />
		</layout>
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMax" value="ERROR" />
			<param name="LevelMin" value="ERROR" />
		</filter>
	</appender>
	
	<!-- SQL日志 -->
	<appender name="sql" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="./log/sql.log" />
		<param name="BufferSize" value="8192"/> 
		<param name="DatePattern" value="'_'yyyy-MM-dd'.log'" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%-5p][%d{yyyy-MM-dd HH:mm:ss.SSS}][%10t]:[%m][%-17C{8}:%4L]%n" />
		</layout>
		
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMax" value="ERROR" />
			<param name="LevelMin" value="INFO" />
		</filter>
	</appender>
	
	<logger name="log" additivity="false">
	    <appender-ref ref="Console" />
		<appender-ref ref="log" />
	</logger>
	
	<!-- additivity="true" 表示logger=sql的日志会打印到root中 -->
	<logger name="sql" additivity="true">
	    <appender-ref ref="Console" />
		<appender-ref ref="sql" />
	</logger>
	
	<!-- additivity="true" 表示logger=sql的日志会打印到root中 -->
	<logger name="exception" additivity="true">
	    <appender-ref ref="Console" />
		<appender-ref ref="exception" />
	</logger>
	
	
	<!-- root元素定义根日志输出器 -->
	<root>
		<appender-ref ref="log" />
		<appender-ref ref="exception" />
		<appender-ref ref="sql" />
	</root>
	
</log4j:configuration>

(4)sysUser.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.wrs.model.SysUserMapper">
    
    <!-- 新增用户 -->
    <insert id="insertSysUser" parameterType="com.wrs.model.SysUser">
	    insert into sys_user(id,user_name) values (#{id},#{user_name})
	</insert>
    
    <!-- 删除用户 -->
    <delete id="deleteSysUser">
        delete from sys_user where id = #{id}
    </delete>
    
    <!-- 修改用户 -->
    <update id="updateSysUser" parameterType="com.wrs.model.SysUser">
        update sys_user set user_name = #{user_name} where id = #{id}
    </update>
    
    <!-- 查询单个用户 -->
	<select id="selectSysUser" resultType="com.wrs.model.SysUser">
		select * from sys_user where id = #{id}
	</select>
	
	<!-- 查询所有用户 -->
	<select id="selectSysUserList" resultType="com.wrs.model.SysUser">
	    <![CDATA[select * from sys_user order by id asc]]>
	</select>
	
</mapper>



3、实现代码

(1)LogHelper.java


package com.wrs.common;

import java.net.URL;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
 *	@function	项目日志  
 *	@author	WRS
 *	@remark	项目日志打印:常用日志、sql日志 exception异常日志
 *	@version	1.0
 *	@since	jdk1.8
 *	@datetime	2015年7月9日 下午4:10:39
 *	@copyright	{xx.com (c) 2018}
 */
public class LogHelper {
	
	static{
		URL configFileResource = LogHelper.class.getResource("/log4j.xml");
		PropertyConfigurator.configure(configFileResource);
	}

	/**
	 * 普通日志打印
	 * @return 返回普通日志对象
	 */
	public static Logger printLog() {
		return Logger.getLogger("log");
	}
	
	/**
	 * sql日志打印
	 * @return 返回sql日志对象
	 */
	public static Logger printSql() {
		return Logger.getLogger("sql");
	}
	
	/**
	 * 异常日志打印
	 * @return 返回exception日志对象
	 */
	public static Logger printException() {
		return Logger.getLogger("exception");
	}
	
	public static void main(String[] args) {
		
	}
	
}

SessionFactory.java

package com.wrs.common;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 *	@function	session工厂  
 *	@author	{作者}
 *	@remark	{描述}
 *	@version	{版本}
 *	@since	jdk1.6
 *	@datetime	2015年7月28日 上午9:57:58
 *	@copyright	{wrs.com (c) 2013}
 */
public class SessionFactory {
	
	/**
	 * 获取session对象
	 * @return
	 */
	public static SqlSession getSession(){
		LogHelper.printLog().info("SessionFactory getSession()");
		SqlSession session = null;
		try {
			String resource = "mybatis-config.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			if(sqlSessionFactory!=null){
				session = sqlSessionFactory.openSession();
			}else{
				LogHelper.printLog().info("Session对象创建失败,请检查mybatis-config.xml配置是否正确!");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return session;
	}
	
	/**
	 * 释放没用的资源
	 * @param sqlSession
	 */
	public static void close(SqlSession session) {
		LogHelper.printLog().info("SessionFactory close(SqlSession session)");
		if (session!=null) {//释放session资源
			session.clearCache();
			session.close();
			session = null;
		}
		LogHelper.printLog().info("释放资源完毕!");
	}
	
	public static void main(String[] args) {
		getSession();
	}
}

数据分层》

SysUserDao.java

package com.wrs.dao;

import java.util.List;

import com.wrs.model.SysUser;

/**
 *	@function	{功能}  
 *	@author	{作者}
 *	@remark	{描述}
 *	@version	{版本}
 *	@since	jdk1.6
 *	@datetime	2015年7月30日 下午1:53:32
 *	@copyright	{wrs.com (c) 2013}
 */
public interface SysUserDao{
	
	/**
	 * 增加用户
	 * @param sysUser
	 * @return
	 */
	public int insert(SysUser sysUser);
	
	/**
	 * 删除用户
	 * @param id
	 * @return
	 */
	public int delete(Integer id);
	
	/**
	 * 更新用户
	 * @param sysUser
	 * @return
	 */
	public int update(SysUser sysUser);
	
	/**
	 * 查询用户
	 * @param id
	 * @return
	 */
	public SysUser query(Integer id);
	
	/**
	 * 获取所有用户信息
	 * @return
	 */
    public List<SysUser> querySysUserList();
}


SysUserDaoImpl.java

package com.wrs.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.wrs.common.SessionFactory;
import com.wrs.dao.SysUserDao;
import com.wrs.model.SysUser;

/**
 *	@function	用户数据访问接口实现  
 *	@author	WRS
 *	@remark	增、删、改、查
 *	@version	1.0
 *	@since	jdk1.6
 *	@datetime	2015年7月30日 下午1:58:09
 *	@copyright	{wrs.com (c) 2013}
 */
public class SysUserDaoImpl implements SysUserDao {

	private SqlSession session = null;
	
	public SysUserDaoImpl() {
		if (session==null) {
			session = SessionFactory.getSession();
		}
	}
	
	/*
	 * 新增用户
	 * 【注意:增加时应该将session的自动提交改为手动提交,不执行改操作会导致无法增加数据】
	 * (non-Javadoc)
	 * @see com.wrs.dao.SysUserDao#insert(com.wrs.model.SysUser)
	 */
	@Override
	public int insert(SysUser sysUser) {
		session.commit(false);//1、先取消自动提交
		int insertRslt = session.insert("com.wrs.model.SysUserMapper.insertSysUser", sysUser);//2、执行增加操作
		session.commit();//3、手动提交
		return insertRslt;
	}

	/*
	 * 删除用户
	 * 【注意:删除时应该将session的自动提交改为手动提交,不执行改操作会导致无法删除数据】
	 * (non-Javadoc)
	 * @see com.wrs.dao.SysUserDao#delete(java.lang.Integer)
	 */
	@Override
	public int delete(Integer Id) {
		session.commit(false);
		int deleteRslt = session.delete("com.wrs.model.SysUserMapper.deleteSysUser", Id);
		session.commit();
		System.out.println("删除用户结果:"+(deleteRslt==1?"成功":"失败")+"!");
		return deleteRslt;
	}

	/*
	 * 修改用户
	 * 【注意:修改时应该将session的自动提交改为手动提交,不执行改操作会导致无法修改数据】
	 * (non-Javadoc)
	 * @see com.wrs.dao.SysUserDao#update(com.wrs.model.SysUser)
	 */
	@Override
	public int update(SysUser sysUser) {
		session.commit(false);
		int deleteRslt = session.update("com.wrs.model.SysUserMapper.updateSysUser", sysUser);
		session.commit();
		return deleteRslt;
	}

	/*
	 * 查询单个用户
	 * (non-Javadoc)
	 * @see com.wrs.dao.SysUserDao#query(java.lang.Integer)
	 */
	@Override
	public SysUser query(Integer Id) {
		return session.selectOne("com.wrs.model.SysUserMapper.selectSysUser", Id);
	}

	/*
	 * 查询所有用户
	 * (non-Javadoc)
	 * @see com.wrs.dao.SysUserDao#querySysUserList()
	 */
	@Override
	public List<SysUser> querySysUserList() {
		return session.selectList("com.wrs.model.SysUserMapper.selectSysUserList");
	}

}


业务逻辑层》

SysUserService.java

package com.wrs.service;

import java.util.List;

import com.wrs.model.SysUser;

/**
 *	@function	{功能}  
 *	@author	{作者}
 *	@remark	{描述}
 *	@version	{版本}
 *	@since	jdk1.6
 *	@datetime	2015年7月30日 下午1:53:32
 *	@copyright	{wrs.com (c) 2013}
 */
public interface SysUserService {
	
	/**
	 * 增加用户
	 * @param sysUser
	 * @return
	 */
	public int insert(SysUser sysUser);
	
	/**
	 * 删除用户
	 * @param id
	 * @return
	 */
	public int delete(Integer id);
	
	/**
	 * 更新用户
	 * @param sysUser
	 * @return
	 */
	public int update(SysUser sysUser);
	
	/**
	 * 查询用户
	 * @param id
	 * @return
	 */
	public SysUser query(Integer id);
	
	/**
	 * 获取所有用户信息
	 * @return
	 */
    public List<SysUser> querySysUserList();
}

SysUserServiceImpl.java

package com.wrs.service.impl;

import java.util.List;

import com.wrs.dao.SysUserDao;
import com.wrs.dao.impl.SysUserDaoImpl;
import com.wrs.model.SysUser;
import com.wrs.service.SysUserService;

/**
 *	@function	{功能}  
 *	@author	{作者}
 *	@remark	{描述}
 *	@version	{版本}
 *	@since	jdk1.6
 *	@datetime	2015年7月30日 下午1:58:09
 *	@copyright	{wrs.com (c) 2013}
 */
public class SysUserServiceImpl implements SysUserService {

	private SysUserDao sysUserDao = null;
	
	public SysUserServiceImpl() {
		if (sysUserDao==null) {
			sysUserDao = new SysUserDaoImpl();
		}
	}
	
	@Override
	public int insert(SysUser sysUser) {
		return sysUserDao.insert(sysUser);
	}

	@Override
	public int delete(Integer Id) {
		return sysUserDao.delete(Id);
	}

	@Override
	public int update(SysUser sysUser) {
		return sysUserDao.update(sysUser);
	}

	@Override
	public SysUser query(Integer Id) {
		return sysUserDao.query(Id);
	}

	@Override
	public List<SysUser> querySysUserList() {
		return sysUserDao.querySysUserList();
	}

}

调用Action》

SysUserAction.java

package com.wrs.action;

import java.util.List;

import com.wrs.common.LogHelper;
import com.wrs.model.SysUser;
import com.wrs.service.SysUserService;
import com.wrs.service.impl.SysUserServiceImpl;

/**
 *	@function	{功能}  
 *	@author	{作者}
 *	@remark	{描述}
 *	@version	{版本}
 *	@since	jdk1.6
 *	@datetime	2015年7月30日 上午11:47:31
 *	@copyright	{wrs.com (c) 2013}
 */
public class SysUserAction {
	
	private SysUserService sysUserService = null;
	
	public SysUserAction() {
		if(sysUserService==null){
			sysUserService = new SysUserServiceImpl();
		}
	}
	
	/**
	 * 新增用户
	 * 【注意:增加时应该将session的自动提交改为手动提交,不执行改操作会导致无法增加数据】
	 */
	public void insert(){

		LogHelper.printLog().info("SysUserAction insert()");
		
		SysUser sysUser = new SysUser(3,"生哥");//如数据库支持Id主键自增,则Id可以为null值,如"mysql数据库"
		int insertRslt = sysUserService.insert(sysUser);
		LogHelper.printLog().info("新增用户结果:"+(insertRslt==1?"成功":"失败")+"!");
	}
	
	/**
	 * 删除用户
	 * 【注意:删除时应该将session的自动提交改为手动提交,不执行改操作会导致无法删除数据】
	 */
	public void delete(){

		LogHelper.printLog().info("SysUserAction delete()");
		
		int deleteRslt = sysUserService.delete(3);
		LogHelper.printLog().info("删除用户结果:"+(deleteRslt==1?"成功":"失败")+"!");
		
	}
	
	/**
	 * 修改用户
	 * 【注意:删除时应该将session的自动提交改为手动提交,不执行改操作会导致无法修改数据】
	 */
	public void update(){

		LogHelper.printLog().info("SysUserAction delete()");
	
		SysUser sysUser = new SysUser(3,"生哥别名");
		int deleteRslt = sysUserService.update(sysUser);
		LogHelper.printLog().info("修改用户结果:"+(deleteRslt==1?"成功":"失败")+"!");
		
	}
	
	/**
	 * 查询用户
	 */
	public void query(){

		LogHelper.printLog().info("SysUserAction query()");
		
		SysUser sysUser = sysUserService.query(1);
		LogHelper.printLog().info("用户ID:"+sysUser.getId()+",用户名:"+sysUser.getUser_name());
		
	}
	
	/**
	 * 查询所有用户数量
	 */
	 public void querySysUserList(){
		 
		LogHelper.printLog().info("SysUserAction query()");
			
		List<SysUser> sysUserList = sysUserService.querySysUserList();
		LogHelper.printLog().info("用户数量:"+sysUserList.size());
			
	 }
	
	public static void main(String[] args) {
		SysUserAction sysUserAction = new SysUserAction();
		//sysUserAction.insert();
		//sysUserAction.delete();
		//sysUserAction.update();
		//sysUserAction.query();
		sysUserAction.querySysUserList();
	}
}



友情提示本人提供相关IT技术开发和支持,与其相关技术交流。

如需请加微信号:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值