自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>
(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技术开发和支持,与其相关技术交流。
如需请加微信号: