`
liufei.fir
  • 浏览: 686266 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MyBatis尝鲜

阅读更多
<?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&amp;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 demo mybatis 实例

    MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...

    mybatis-3-mybatis-3.2.6

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在深入探讨MyBatis 3.2.6版本的源码之前,我们首先需要了解MyBatis的基本概念和功能。 MyBatis的核心部分主要包括SqlSessionFactory、...

    mybatis的中文api文档

    MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJOs...

    MybatisGenerate_代码生成_tkMybatis_mybatisgenerate_mybatis_

    MybatisGenerate是一个强大的工具,主要用于自动化生成Mybatis相关的代码,以提高开发效率并减少手动编写重复性工作的负担。这个工具是基于tk.mybatis框架的,它整合了Mybatis的优秀特性,使得开发者能够更加便捷地...

    mybatis3.5.7.zip

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 ...

    MyBatis入门.pdf

    MyBatis入门 MyBatis是一个优秀的持久层框架,使用XML将SQL与程序解耦,便于维护。MyBatis学习简单,执行高效,是JDBC的延伸。MyBatis提供了数据库增删改查的便捷操作,极大提高了开发效率、统一的编码规则、利于...

    mybatis中文离线文档

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    MyBatis3官方中文文档

    MyBatis是一款流行的Java持久层框架,它的设计理念是通过简单的XML或注解用于配置和映射原始类型、接口和Java POJOs(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。MyBatis可以与各种数据库交互,...

    mybatisx.zip

    这个压缩包文件“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入门案例mybatis入门案例...

    MyBatis入门到精通

    MyBatis是一款强大的Java持久层框架,它将SQL与Java代码分离,使开发者可以更方便地操作数据库。这篇“MyBatis入门到精通”的学习资料是针对初学者设计的,旨在帮助新手快速掌握MyBatis的基本用法和高级特性。 1. *...

    Mybatis用到的资料

    Mybatis是中国著名的开源Java持久层框架,它支持定制化SQL、存储过程以及高级映射。这个压缩包文件“Mybatis用到的资料”显然包含了学习和理解Mybatis所需的各种资源,对于想要深入研究Mybatis的开发者来说是宝贵的...

    MyBatis-3.4.6.zip

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    mybatis 3.2.6

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    mybatis_plugin 2.92

    MyBatis 是一款深受开发者喜爱的持久层框架,它提供了灵活的 SQL 执行和映射功能,有效地将数据库操作与应用程序代码分离。MyBatis 插件系统是 MyBatis 框架的一个强大特性,允许用户自定义拦截器来增强其功能。...

    mybatis_3.5.9官方中文文档pdf

    MyBatis 官方中文文档 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置...

    MyBatis-Plus入门+MyBatis-Plus文档手册 中文pdf高清版.rar

    mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的...

    mybatis-platform_mybatis_

    【标题】: "mybatis-platform_mybatis_" 【描述】: "mybatis-platform是一个使用MyBatis和Druid进行SQL映射的项目。这个项目旨在提供一个基于MyBatis框架的平台,集成Druid数据源,以实现更高效、更灵活的数据库...

    mybatisX for idea.zip

    MybatisX是一款为Java开发人员设计的Mybatis插件,专为IntelliJ IDEA集成开发环境(IDEA)提供便利。这款插件的原版名为"MybatisX-idea.0.1.0.jar",旨在提升Mybatis框架的开发效率。在本篇文章中,我们将深入探讨...

    mybatis-3-config.dtd mybatis-3-mapper.dtd

    在MyBatis中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 是两个至关重要的DTD(Document Type Definition)文件,它们定义了MyBatis配置文件和映射文件的结构和规则。 首先,让我们深入了解一下`mybatis-3...

Global site tag (gtag.js) - Google Analytics