<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25000"/>
</settings>
<typeAliases>
<typeAlias type="org.liufei.ibatis3.model.Admin" alias="Admin"/>
</typeAliases>
<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://localhost:3306/ibatis?useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="liufei" />
<property name="poolMaximumActiveConnections" value="20"/>
<property name="poolMaximumIdleConnections" value="5"/>
<property name="poolMaximumCheckoutTime" value="20000"/>
<property name="poolTimeToWait" value="20000"/>
<property name="poolPingQuery" value="NO PING QUERY SET"/>
<property name="poolPingEnabled" value="false"/>
<property name="poolPingConnectionsNotUsedFor" value="0"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/liufei/ibatis3/model/AdminMapper.xml" />
</mappers>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="Admin">
<resultMap type="Admin" id="admin">
<id property="id" column="id" javaType="java.lang.Integer"/>
<result property="name" column="name" javaType="java.lang.String"/>
<result property="password" column="password" javaType="java.lang.String"/>
</resultMap>
<insert id="insert" parameterType="Admin" keyProperty="id" useGeneratedKeys="true">
<!-- oracle : SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL -->
<!-- ms sqlserver : SELECT @@IDENTITY AS ID ( 该方法不安全 应当用SCOPE_IDENTITY() 但这个函数属于域函数,需要在一个语句块中执行。 )-->
<selectKey>
<![CDATA[
SELECT LAST_INSERT_ID() AS ID
]]>
</selectKey>
<![CDATA[
INSERT INTO
Admin
(
id,
name,
password
)
VALUES(
#{id, jdbcType=BIGINT},
#{name, jdbcType=VARCHAR},
#{password, jdbcType=VARCHAR}
)
]]>
</insert>
<update id="update" parameterType="Admin">
<![CDATA[
UPDATE Admin SET
name = #{name},
password = #{password}
WHERE id = #{id}
]]>
</update>
<delete id="delete" parameterType="Admin">
<![CDATA[
DELETE FROM Admin
]]>
<where>
<if test="id != null">
id = #{id}
</if>
<if test="name != null">
AND name = #{name}
</if>
<if test="password != null">
AND password = #{password}
</if>
</where>
</delete>
<select id="selectByIdToAdmin" parameterType="int" resultType="Admin">
select <include refid="commonColumns"/>
<![CDATA[
from Admin where id = #{id}
]]>
</select>
<select id="selectByIdToMap" parameterType="int" resultType="admin">
select <include refid="commonColumns"/>
<![CDATA[
from Admin where id = #{id}
]]>
</select>
<select id="selectListByName" parameterType="java.lang.String" resultType="java.util.List">
select <include refid="commonColumns"/>
<![CDATA[
from Admin where name = #{name}
]]>
</select>
<select id="getCounts" parameterType="Admin" resultType="java.lang.Long">
<![CDATA[
SELECT count(*) from Admin
]]>
<include refid="dynamicWhere"/>
</select>
<sql id="columns">
<![CDATA[
id as admin_id,
name as admin_name,
password as admin_password
]]>
</sql>
<sql id="commonColumns">
<![CDATA[
id, name, password
]]>
</sql>
<sql id="column">
<![CDATA[
name, password
]]>
</sql>
<sql id="dynamicWhere">
<where>
<if test="id != null">
id = #{id}
</if>
<if test="name != null">
AND name = #{name}
</if>
<if test="password != null">
AND password = #{password}
</if>
</where>
</sql>
</mapper>
package org.liufei.ibatis3.conf;
import java.io.IOException;
import java.io.Reader;
import java.io.Serializable;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisSqlSessionFactory implements Serializable {
private static final long serialVersionUID = -6077262772667534553L;
private final static String RESOURCE_FILE_LOCATION = "Configuration.xml" ;
private static String resource = RESOURCE_FILE_LOCATION ;
private static SqlSessionFactory sqlSessionFactory ;
private static final ThreadLocal<SqlSession> threadLocalSThreadLocal = new ThreadLocal<SqlSession>() ;
static{
try {
Reader reader = Resources.getResourceAsReader(resource) ;
MyBatisSqlSessionFactory.sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader) ;
} catch (IOException e) {
System.out.println("SqlSessionFactory初始化异常: " + e.getLocalizedMessage());
}
}
private MyBatisSqlSessionFactory() {
}
/**
* 获取SqlSession对象
* @return SqlSession
*/
public static SqlSession getSqlSession() {
SqlSession sqlSession = (SqlSession) threadLocalSThreadLocal.get() ;
if(sqlSession == null){
if(sqlSessionFactory == null){
rebuildSqlSessionFactory() ;
}
sqlSession = (sqlSessionFactory != null) ? sqlSessionFactory.openSession() : null ;
threadLocalSThreadLocal.set(sqlSession) ;
}
return sqlSession;
}
/**
* 关闭缓存中的SqlSession对象
*/
public static void closeSqlSession() {
SqlSession sqlSession = (SqlSession) threadLocalSThreadLocal.get() ;
threadLocalSThreadLocal.set(null) ;
if(sqlSession != null)
sqlSession.close() ;
}
/**
* 重置SqlSessionFactory对象
*/
public static void rebuildSqlSessionFactory(){
try {
Reader reader = Resources.getResourceAsReader(resource) ;
MyBatisSqlSessionFactory.sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader) ;
} catch (IOException e) {
System.out.println("SqlSessionFactory初始化异常: " + e.getLocalizedMessage());
}
}
/**
* 获取SqlSessionFactory对象
* @return SqlSessionFactory
*/
public static SqlSessionFactory getSqlSessionFactory() {
if(sqlSessionFactory == null){
rebuildSqlSessionFactory() ;
}
return sqlSessionFactory;
}
/**
* 重置配置文件路径
* @param resource
*/
public static void setResource(String resource) {
MyBatisSqlSessionFactory.resource = resource;
MyBatisSqlSessionFactory.sqlSessionFactory = null ;
}
}
package org.liufei.ibatis3.conf;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.liufei.ibatis3.model.Admin;
public class Main {
private SqlSession sqlSession ;
public Main(){
this.sqlSession = MyBatisSqlSessionFactory.getSqlSession() ;
}
public int insert(Admin admin){
int result = 0 ;
try{
result = this.sqlSession.insert("Admin.insert", admin) ;
this.sqlSession.commit() ;
}catch (Exception e) {
System.out.println("插入异常 : " + e.getLocalizedMessage());
this.sqlSession.rollback() ;
}
return result ;
}
public int update(Admin admin){
int result = 0 ;
try{
result = this.sqlSession.update("Admin.update", admin) ;
this.sqlSession.commit() ;
}catch (Exception e) {
System.out.println("插入异常 : " + e.getLocalizedMessage());
this.sqlSession.rollback() ;
}
return result ;
}
public int delete(Admin admin){
int result = 0 ;
try{
result = this.sqlSession.delete("Admin.delete", admin) ;
this.sqlSession.commit() ;
}catch (Exception e) {
System.out.println("插入异常 : " + e.getLocalizedMessage());
this.sqlSession.rollback() ;
}
return result ;
}
@SuppressWarnings("unchecked")
public Map<String, Admin> selectMap(String id){
Map<String, Admin> adminMap = new HashMap<String, Admin>() ;
adminMap = this.sqlSession.selectMap("Admin.selectByIdToMap", id, "name") ;
return adminMap ;
}
public Admin selectAdmin(int id){
return (Admin) this.sqlSession.selectOne("Admin.selectByIdToAdmin", id) ;
}
@SuppressWarnings("unchecked")
public List<Admin> selectList(String name){
return this.sqlSession.selectList("Admin.selectListByName", name) ;
}
public Long getCounts(Admin admin){
return (Long) this.sqlSession.selectOne("Admin.getCounts", admin) ;
}
public static void main(String[] args) {
Main maintest = new Main() ;
//Admin admin = new Admin(4, "liufeiupdate1", "liufei1229update1222222222222") ;
//int i = maintest.insert(admin) ;
//int i = maintest.delete(admin) ;
//maintest.update(admin) ;
Map<String, Admin> adminMap = maintest.selectMap("liufei") ;
System.out.println(adminMap.get("liufei"));
//Admin adminget = maintest.selectAdmin(10) ;
//System.out.println(adminget);
List<Admin> admins = maintest.selectList("liufei") ;
System.out.println(admins.size());
for (Admin admin2 : admins) {
System.out.println(admin2);
}
System.out.println(maintest.getCounts(new Admin(null, "liufei", "liufei1229")));
}
}
分享到:
相关推荐
MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在深入探讨MyBatis 3.2.6版本的源码之前,我们首先需要了解MyBatis的基本概念和功能。 MyBatis的核心部分主要包括SqlSessionFactory、...
MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJOs...
MybatisGenerate是一个强大的工具,主要用于自动化生成Mybatis相关的代码,以提高开发效率并减少手动编写重复性工作的负担。这个工具是基于tk.mybatis框架的,它整合了Mybatis的优秀特性,使得开发者能够更加便捷地...
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 ...
MyBatis入门 MyBatis是一个优秀的持久层框架,使用XML将SQL与程序解耦,便于维护。MyBatis学习简单,执行高效,是JDBC的延伸。MyBatis提供了数据库增删改查的便捷操作,极大提高了开发效率、统一的编码规则、利于...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...
MyBatis是一款流行的Java持久层框架,它的设计理念是通过简单的XML或注解用于配置和映射原始类型、接口和Java POJOs(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。MyBatis可以与各种数据库交互,...
这个压缩包文件“mybatisx.zip”包含了多个版本的MybatisX插件,包括MybatisX-1.4.16.zip、MybatisX-1.4.8.zip、MybatisX-1.4.6.zip以及MybatisX-1.1.2.zip。这些版本的差异可能体现在功能增强、性能优化或者修复...
mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例...
MyBatis是一款强大的Java持久层框架,它将SQL与Java代码分离,使开发者可以更方便地操作数据库。这篇“MyBatis入门到精通”的学习资料是针对初学者设计的,旨在帮助新手快速掌握MyBatis的基本用法和高级特性。 1. *...
Mybatis是中国著名的开源Java持久层框架,它支持定制化SQL、存储过程以及高级映射。这个压缩包文件“Mybatis用到的资料”显然包含了学习和理解Mybatis所需的各种资源,对于想要深入研究Mybatis的开发者来说是宝贵的...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...
MyBatis 是一款深受开发者喜爱的持久层框架,它提供了灵活的 SQL 执行和映射功能,有效地将数据库操作与应用程序代码分离。MyBatis 插件系统是 MyBatis 框架的一个强大特性,允许用户自定义拦截器来增强其功能。...
MyBatis 官方中文文档 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置...
mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的...
【标题】: "mybatis-platform_mybatis_" 【描述】: "mybatis-platform是一个使用MyBatis和Druid进行SQL映射的项目。这个项目旨在提供一个基于MyBatis框架的平台,集成Druid数据源,以实现更高效、更灵活的数据库...
MybatisX是一款为Java开发人员设计的Mybatis插件,专为IntelliJ IDEA集成开发环境(IDEA)提供便利。这款插件的原版名为"MybatisX-idea.0.1.0.jar",旨在提升Mybatis框架的开发效率。在本篇文章中,我们将深入探讨...
在MyBatis中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 是两个至关重要的DTD(Document Type Definition)文件,它们定义了MyBatis配置文件和映射文件的结构和规则。 首先,让我们深入了解一下`mybatis-3...