`

MyBatis

阅读更多

之前写了Ibatis,为了做个对比,今天写写MyBatis:

 一、基于xml映射形式:

1.总配置文件Configuration.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="com/mymy/jdbc.properties">
		<property name="username" value="root"/>	<!-- 会被jdbc.properties中的值覆盖 -->
		<property name="password" value="123"/>
	</properties>
	<settings>  
		<!-- 全局映射器启用缓存 -->  
		<setting name="cacheEnabled" value="true" />  
		<!-- 查询时,是否开启懒加载模式,true:关闭关联对象即时加载以提高性能 -->  
		<setting name="lazyLoadingEnabled" value="false" />  
		<!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 -->  
		<setting name="aggressiveLazyLoading" value="false" />  
		<!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->  
		<setting name="multipleResultSetsEnabled" value="true" />  
		<!-- 允许使用列标签代替列名 -->  
		<setting name="useColumnLabel" value="true" />  
		<!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->  
		<setting name="useGeneratedKeys" value="true" />  
		<!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->  
		<setting name="autoMappingBehavior" value="FULL" />  
		<!-- 对于批量更新操作缓存SQL以提高性能  -->  
		<setting name="defaultExecutorType" value="BATCH" />  
		<!-- 数据库超过25000秒仍未响应则超时 -->  
		<setting name="defaultStatementTimeout" value="25000" />  
	</settings>  
	<!-- 全局别名 -->
	<typeAliases>
		<typeAlias type="com.mymy.bean.User" alias="User"/>
	</typeAliases>
	<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>
		<!-- xml形式的映射 -->
		<mapper resource="com/mymy/bean/User.xml" />  
		<!-- 注解形式的映射 
		<mapper class="com.mymy.dao.UserDao" />
		-->
	</mappers>
</configuration>
 2.数据库配置文件jdbc.properties:

 

 

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatisdb
username=root
password=123
 3 User实体类:

 

 

package com.mymy.bean;

public class User {
	private int id;
	private String userName;
	private int userAge;
	private String userAddress;
	
	public User() {	}
	public User(String userName, int userAge,String userAddress) {
		this.userName = userName;
		this.userAge = userAge;
		this.userAddress = userAddress;
	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public int getUserAge() {
		return userAge;
	}
	public void setUserAge(int userAge) {
		this.userAge = userAge;
	}
	public String getUserAddress() {
		return userAddress;
	}
	public void setUserAddress(String userAddress) {
		this.userAddress = userAddress;
	}
	
}
 4.UserMapper.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="User" >
	
	<resultMap type="User" id="userResultMap">
		<result column="id" property="id" />
		<result column="user_name" property="userName" />
		<result column="user_age" property="userAge" />
		<result column="user_address" property="userAddress" />
	</resultMap>
	
	<select id="selectOneUser" parameterType="int" resultType="User" resultMap="userResultMap">
		select * from t_user where id = #{id}
	</select>
	
	<insert id="insertUser" parameterType="User"  >
		INSERT INTO t_user (user_name,user_age,user_address) VALUES(#{userName},#{userAge},#{userAddress})
	</insert>
	
	<delete id="deleteUser" parameterType="Integer">
		delete from t_user where id = #{id}
	</delete>
	
	<update id="updateUser" parameterType="User" >
		UPDATE t_user t SET t.user_name=#{userName},t.user_age=#{userAge} WHERE t.id=#{id}
	</update>
	
</mapper>
 

 

 5.MyBatisTest 测试类:

 

package com.test;

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;

import com.model.User;

public class MyBatisTest {
	private static SqlSessionFactory fa = null;
	private static Reader reader = null;
	static{
		try {
			reader = Resources.getResourceAsReader("Configuration.xml");
			fa = new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static SqlSessionFactory getSqlSessionFactory(){
		return fa;
	}
	public static void main(String[] args) {
		SqlSession session = getSqlSessionFactory().openSession();
		try{	
			// * 增
//			User user = new User("abc",11,"asdf");
//			session.insert("User.insertUser",user);
		
			// * 删
//			session.delete("User.deleteUser", 7);
			 	
			/*
			 * 改
			 */
			User user = new User("abc",13,"asdf");
			user.setId(6);
			session.update("updateUser",user);
			
			/*
			 * 查
			 */
//			User user = session.selectOne("User.selectOneUser",1);
//			System.out.println(user.getUserName()+":"+user.getUserAge());
		}finally{
			session.commit();
			session.close();
		}
	}
}
 6.项目结构:


 
二、基于注解形式:
1.和xml形式的区别在于总配置文件Configuration.xml中的<mapper class="com.mymy.dao.UserDao" />指定接口,具体接口如下:
2.UserDao接口
package com.mymy.dao;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.mymy.bean.User;

public interface UserDao {
	
	//字段都列出来是为了解决[数据库字段]和[实体类中属性]不一致的问题
	@Select("select id as id, user_name as userName,user_age as userAge ,user_address as userAddress from t_user where id =#{id}")
	public User findUserById(int id);
	
	@Update("update t_user t set t.user_name=#{userName} , t.user_age=#{userAge} , t.user_address = #{userAddress} where t.id=#{id}")
	public void updateUser(User user);
	
	@Insert("insert into t_user (user_name,user_age,user_address) values (#{userName},#{userAge},#{userAddress})" )
	public void addUser(User user);
	
	@Delete("delete from t_user where id = #{id}")
	public void deleteUserById(int id);
	
	@Select("select id as id, user_name as userName,user_age as userAge ,user_address as userAddress from t_user")
	public List<User> findUserList();
	
}
3.测试类:
package com.mymy.test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

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

import com.mymy.bean.User;
import com.mymy.dao.UserDao;

public class MyBatisTest {
	
	private static SqlSessionFactory fa = null;
	private static Reader reader = null;
	static{
		try {
			reader = Resources.getResourceAsReader("Configuration.xml");
			fa = new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static SqlSessionFactory getFactory(){
		return fa;
	}

	public static void main(String[] args) {
		SqlSession session = getFactory().openSession();
		try{

			UserDao userdao = session.getMapper(UserDao.class);
			/* 查
			User u = userdao.findUserById(4);
			System.out.println(u.getUserName()+"/"+u.getUserAge());
			*/
			//增
			//userdao.addUser(new User("hello",16,"sh"));
			//删
			//userdao.deleteUserById(8);
			/* 改
			User u = new User("kitty",10,"japan");
			u.setId(1);
			userdao.updateUser(u);
			*/
			List<User> userList = userdao.findUserList();
			for (User u : userList) {
				System.out.println(u.getId());
				System.out.println(u.getUserName());
				System.out.println(u.getUserAge());
				System.out.println(u.getUserAddress());
				System.out.println("================");
			}
			session.commit();
		}finally{
			session.close();
		}
	}
}
4.项目解结构:



在总配置文件注册xml或者注解所在的接口,得到SessionFactory ->得到session
1.通过session的方法(insert、update、delete、selectOne等)+ namespace+sql的id ,进行操作
2.通过session的gaetMapper(接口.class) 得到接口的句柄,从而操作接口内的方法。
  • 大小: 16.3 KB
  • 大小: 14.6 KB
分享到:
评论

相关推荐

    Spring+SpringMVC+Mybatis框架整合例子(SSM) 下载

    Spring、SpringMVC和Mybatis是Java开发中最常用的三大开源框架,它们的整合使用,通常被称为SSM框架。这个框架组合提供了完整的后端服务解决方案,包括依赖注入(DI)、面向切面编程(AOP)、模型-视图-控制器(MVC...

    MybatisGenerate_代码生成_tkMybatis_mybatisgenerate_mybatis_

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

    mybatis的中文api文档

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

    mybatis3.5.7.zip

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

    mybatis-3-mybatis-3.2.6

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

    【狂神说】mybatis学习总结笔记(全)PDF格式文档 MyBatis.pdf

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

    mybatis中文离线文档

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

    高效数据脱敏工具 - MyBatis-Cipher,基于MyBatis的数据库敏感信息加密解密方案

    项目名称:MyBatis-Cipher - 高效数据脱敏工具 项目简介: MyBatis-Cipher 是一款基于 Java 语言开发的数据库敏感信息加密解密方案,专为 MyBatis 设计。它能够在数据进出数据库(DB)的过程中自动对敏感信息进行...

    mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip

    mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip ...

    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-3-config.dtd mybatis-3-mapper.dtd

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

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

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

    IDEA的MyBatis插件两个

    本篇文章将详细介绍两个针对MyBatis框架的IntelliJ IDEA插件——MyBatisCodeHelper-Pro和MybatisX,它们都是为了提升MyBatis开发体验而设计的。 首先,我们来看MyBatisCodeHelper-Pro。这款插件是专为MyBatis开发者...

    MyBatis-Flex: 一个优雅的 MyBatis 增强框架

    MyBatis-Flex: 一个优雅的 MyBatis 增强框架。很轻量,MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。只增强,MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的...

    MyBatis3官方中文文档

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

    MyBatis入门到精通

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

    MyBatis入门.pdf

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

    MyBatis-3.4.6.zip

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

    基于Tk MyBatis框架,mybatis 注解方式实现数据的加解密

    "基于Tk MyBatis框架,mybatis 注解方式实现数据的加解密"这个主题就聚焦于如何在MyBatis框架中使用注解来实现在数据库交互过程中对数据的加密与解密。 首先,我们来看Tk MyBatis。Tk MyBatis是MyBatis的增强工具,...

    mybatis_3.5.9官方中文文档pdf

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

Global site tag (gtag.js) - Google Analytics