zoukankan      html  css  js  c++  java
  • 【MyBatis】配置文件示例

    配置文件

    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>
    
    <typeHandlers>
    	<!--1、配置我们自定义的TypeHandler  -->
    	<typeHandler handler="com.atguigu.mybatis.typehandler.MyEnumEmpStatusTypeHandler" javaType="com.atguigu.mybatis.bean.EmpStatus"/>
    	<!--2、也可以在处理某个字段的时候告诉MyBatis用什么类型处理器
    			保存:#{empStatus,typeHandler=xxxx}
    			查询:
    				<resultMap type="com.atguigu.mybatis.bean.Employee" id="MyEmp">
    				 	<id column="id" property="id"/>
    				 	<result column="empStatus" property="empStatus" typeHandler=""/>
    				</resultMap>
    			注意:如果在参数位置修改TypeHandler,应该保证保存数据和查询数据用的TypeHandler是一样的。
    	 -->
    	</typeHandlers>
    	<plugins>
    		<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    	</plugins>
    	<!--
    		1、mybatis可以使用properties来引入外部properties配置文件的内容;
    		resource:引入类路径下的资源
    		url:引入网络路径或者磁盘路径下的资源
    	  -->
    	<properties resource="dbconfig.properties"></properties>
    	
    	<!-- 
    		2、settings包含很多重要的设置项
    		setting:用来设置每一个设置项
    			name:设置项名
    			value:设置项取值
    	 -->
    	<settings>
    		<setting name="mapUnderscoreToCamelCase" value="true"/>
    	</settings>
    	
    	
    	<!-- 3、typeAliases:别名处理器:可以为我们的java类型起别名 
    			别名不区分大小写
    	-->
    	<typeAliases>
    		<!-- 1、typeAlias:为某个java类型起别名
    				type:指定要起别名的类型全类名;默认别名就是类名小写;employee
    				alias:指定新的别名
    		 -->
    		<!-- <typeAlias type="com.atguigu.mybatis.bean.Employee" alias="emp"/> -->
    		
    		<!-- 2、package:为某个包下的所有类批量起别名 
    				name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写),)
    		-->
    		<package name="com.atguigu.mybatis.bean"/>
    		
    		<!-- 3、批量起别名的情况下,使用@Alias注解为某个类型指定新的别名 -->
    	</typeAliases>
    		
    	<!-- 
    		4、environments:环境们,mybatis可以配置多种环境 ,default指定使用某种环境。可以达到快速切换环境。
    			environment:配置一个具体的环境信息;必须有两个标签;id代表当前环境的唯一标识
    				transactionManager:事务管理器;
    					type:事务管理器的类型;JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)
    						自定义事务管理器:实现TransactionFactory接口.type指定为全类名
    				
    				dataSource:数据源;
    					type:数据源类型;UNPOOLED(UnpooledDataSourceFactory)
    								|POOLED(PooledDataSourceFactory)
    								|JNDI(JndiDataSourceFactory)
    					自定义数据源:实现DataSourceFactory接口,type是全类名
    		 -->
    		 
    
    		 
    	<environments default="dev_mysql">
    		<environment id="dev_mysql">
    			<transactionManager type="JDBC"></transactionManager>
    			<dataSource type="POOLED">
    				<property name="driver" value="${jdbc.driver}" />
    				<property name="url" value="${jdbc.url}" />
    				<property name="username" value="${jdbc.username}" />
    				<property name="password" value="${jdbc.password}" />
    			</dataSource>
    		</environment>
    	
    		<environment id="dev_oracle">
    			<transactionManager type="JDBC" />
    			<dataSource type="POOLED">
    				<property name="driver" value="${orcl.driver}" />
    				<property name="url" value="${orcl.url}" />
    				<property name="username" value="${orcl.username}" />
    				<property name="password" value="${orcl.password}" />
    			</dataSource>
    		</environment>
    	</environments>
    	
    	
    	<!-- 5、databaseIdProvider:支持多数据库厂商的;
    		 type="DB_VENDOR":VendorDatabaseIdProvider
    		 	作用就是得到数据库厂商的标识(驱动getDatabaseProductName()),mybatis就能根据数据库厂商标识来执行不同的sql;
    		 	MySQL,Oracle,SQL Server,xxxx
    	  -->
    	<databaseIdProvider type="DB_VENDOR">
    		<!-- 为不同的数据库厂商起别名 -->
    		<property name="MySQL" value="mysql"/>
    		<property name="Oracle" value="oracle"/>
    		<property name="SQL Server" value="sqlserver"/>
    	</databaseIdProvider>
    	
    	
    	<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
    	<!-- 6、mappers:将sql映射注册到全局配置中 -->
    	<mappers>
    		<!-- 
    			mapper:注册一个sql映射 
    				注册配置文件
    				resource:引用类路径下的sql映射文件
    					mybatis/mapper/EmployeeMapper.xml
    				url:引用网路路径或者磁盘路径下的sql映射文件
    					file:///var/mappers/AuthorMapper.xml
    					
    				注册接口
    				class:引用(注册)接口,
    					1、有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;
    					2、没有sql映射文件,所有的sql都是利用注解写在接口上;
    					推荐:
    						比较重要的,复杂的Dao接口我们来写sql映射文件
    						不重要,简单的Dao接口为了开发快速可以使用注解;
    		-->
    		<!-- <mapper resource="mybatis/mapper/EmployeeMapper.xml"/> -->
    		<!-- <mapper class="com.atguigu.mybatis.dao.EmployeeMapperAnnotation"/> -->
    		
    		<!-- 批量注册: -->
    		<package name="com.atguigu.mybatis.dao"/>
    	</mappers>
    </configuration>
    

    dbconfig.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis
    jdbc.username=root
    jdbc.password=123456
    
    orcl.driver=oracle.jdbc.OracleDriver
    orcl.url=jdbc:oracle:thin:@localhost:1521:orcl
    orcl.username=scott
    orcl.password=123456
    

    DAO与XML映射

    EmployeeMapper.java

    package com.atguigu.mybatis.dao;
    
    import com.atguigu.mybatis.bean.Employee;
    
    public interface EmployeeMapper {
    	
    	public Employee getEmpById(Integer id);
    
    }
    
    

    EmployeeMapper.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.atguigu.mybatis.dao.EmployeeMapper">
    <!-- 
    namespace:名称空间;指定为接口的全类名
    id:唯一标识
    resultType:返回值类型
    #{id}:从传递过来的参数中取出id值
    
    public Employee getEmpById(Integer id);
     -->
     	<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
    		select * from tbl_employee where id = #{id}
    	</select>
    	<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee"
    		databaseId="mysql">
    		select * from tbl_employee where id = #{id}
    	</select>
    	<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee"
    		databaseId="oracle">
    		select EMPLOYEE_ID id,LAST_NAME	lastName,EMAIL email 
    		from employees where EMPLOYEE_ID=#{id}
    	</select>
    </mapper>
    

    Employee.java

    package com.atguigu.mybatis.bean;
    
    import org.apache.ibatis.type.Alias;
    
    @Alias("emp")
    public class Employee {
    	
    	private Integer id;
    	private String lastName;
    	private String email;
    	private String gender;
    	
    	
    	public Integer getId() {
    		return id;
    	}
    	public void setId(Integer id) {
    		this.id = id;
    	}
    	public String getLastName() {
    		return lastName;
    	}
    	public void setLastName(String lastName) {
    		this.lastName = lastName;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	public String getGender() {
    		return gender;
    	}
    	public void setGender(String gender) {
    		this.gender = gender;
    	}
    	@Override
    	public String toString() {
    		return "Employee [id=" + id + ", lastName=" + lastName + ", email="
    				+ email + ", gender=" + gender + "]";
    	}
    	
    	
    
    }
    
    

    基于注解的MyBatis操作

    对于不经常改动的JDBC操作,可以直接使用注解的形式。
    EmployeeMapperAnnotation.java

    package com.atguigu.mybatis.dao;
    
    import org.apache.ibatis.annotations.Select;
    
    import com.atguigu.mybatis.bean.Employee;
    
    public interface EmployeeMapperAnnotation {
    	
    	@Select("select * from tbl_employee where id=#{id}")
    	public Employee getEmpById(Integer id);
    }
    

    测试类

    MyBatisTest.java

    package com.atguigu.mybatis.test;
    
    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;
    import org.junit.Test;
    
    import com.atguigu.mybatis.bean.Employee;
    import com.atguigu.mybatis.dao.EmployeeMapper;
    import com.atguigu.mybatis.dao.EmployeeMapperAnnotation;
    
    /**
     * 1、接口式编程
     * 	原生:		Dao		====>  DaoImpl
     * 	mybatis:	Mapper	====>  xxMapper.xml
     * 
     * 2、SqlSession代表和数据库的一次会话;用完必须关闭;
     * 3、SqlSession和connection一样她都是非线程安全。每次使用都应该去获取新的对象。
     * 4、mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。
     * 		(将接口和xml进行绑定)
     * 		EmployeeMapper empMapper =	sqlSession.getMapper(EmployeeMapper.class);
     * 5、两个重要的配置文件:
     * 		mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等...系统运行环境信息
     * 		sql映射文件:保存了每一个sql语句的映射信息:
     * 					将sql抽取出来。	
     * 
     * 
     * @author lfy
     *
     */
    public class MyBatisTest {
    	
    
    	public SqlSessionFactory getSqlSessionFactory() throws IOException {
    		String resource = "mybatis-config.xml";
    		InputStream inputStream = Resources.getResourceAsStream(resource);
    		return new SqlSessionFactoryBuilder().build(inputStream);
    	}
    
    	/**
    	 * 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息
    	 * 2、sql映射文件;配置了每一个sql,以及sql的封装规则等。 
    	 * 3、将sql映射文件注册在全局配置文件中
    	 * 4、写代码:
    	 * 		1)、根据全局配置文件得到SqlSessionFactory;
    	 * 		2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
    	 * 			一个sqlSession就是代表和数据库的一次会话,用完关闭
    	 * 		3)、使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。
    	 * 
    	 * @throws IOException
    	 */
    	@Test
    	public void test() throws IOException {
    
    		// 2、获取sqlSession实例,能直接执行已经映射的sql语句
    		// sql的唯一标识:statement Unique identifier matching the statement to use.
    		// 执行sql要用的参数:parameter A parameter object to pass to the statement.
    		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
    
    		SqlSession openSession = sqlSessionFactory.openSession();
    		try {
    			Employee employee = openSession.selectOne(
    					"com.atguigu.mybatis.EmployeeMapper.selectEmp", 1);
    			System.out.println(employee);
    		} finally {
    			openSession.close();
    		}
    
    	}
    
    	@Test
    	public void test01() throws IOException {
    		// 1、获取sqlSessionFactory对象
    		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
    		// 2、获取sqlSession对象
    		SqlSession openSession = sqlSessionFactory.openSession();
    		try {
    			// 3、获取接口的实现类对象
    			//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
    			EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
    			Employee employee = mapper.getEmpById(1);
    			System.out.println(mapper.getClass());
    			System.out.println(employee);
    		} finally {
    			openSession.close();
    		}
    
    	}
    	
    	@Test
    	public void test02() throws IOException{
    		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
    		SqlSession openSession = sqlSessionFactory.openSession();
    		try{
    			EmployeeMapperAnnotation mapper = openSession.getMapper(EmployeeMapperAnnotation.class);
    			Employee empById = mapper.getEmpById(1);
    			System.out.println(empById);
    		}finally{
    			openSession.close();
    		}
    	}
    	
    	
    }
    
    
  • 相关阅读:
    ASP.NET MVC 5 安全性和创建用户角色
    使用ENTITY FRAMEWORK 6以正确的方式管理DBCONTEXT:深入指南
    C#读取二进制格式的shapefile
    ASP.NET MVC 应用程序初学者常见问题汇总
    ASP.NET MVC 应用程序中使用CKEditor 4 的步骤
    html5学习笔记2
    html5学习笔记
    c#接口定义与应用
    Django ORM 优化心得
    携程的那点事
  • 原文地址:https://www.cnblogs.com/z00377750/p/12397396.html
Copyright © 2011-2022 走看看