Mybatis学习笔记

之前持久层框架一直用的是ibatis,现在开始使用Mybatis注解的形式。总体感觉使用起来差别不是太大,但是为了更快的进行项目开发,还是稍微熟悉一下Mybatis框架。

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。其它的理论性的东西一搜一大把,所以我还是更加倾向于实践。

1、首先新建一个maven快速启动项目。配置pom.xml,下载需要的jar包。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.blog.core</groupId>
  <artifactId>com.blog.core</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>com.blog.core</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
     <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-core</artifactId>
	    <version>3.2.2.RELEASE</version>
	</dependency>
	 <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>3.2.2.RELEASE</version>
	</dependency>
	 <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-beans</artifactId>
	    <version>3.2.2.RELEASE</version>
	</dependency>
      <dependency>  
         <groupId>log4j</groupId>  
         <artifactId>log4j</artifactId>  
         <version>1.2.16</version>  
      </dependency>
      
      <dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis</artifactId>
		   <version>3.1.1</version>
	   </dependency>
	  <dependency>
		    <groupId>mysql</groupId>
		    <artifactId>mysql-connector-java</artifactId>
		    <version>5.1.24</version>
		</dependency>
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis-spring</artifactId>
		    <version>1.2.2</version>
		</dependency>
		<dependency>
		    <groupId>com.alibaba</groupId>
		    <artifactId>druid</artifactId>
		    <version>1.0.13</version>
		</dependency>
	  
  </dependencies>
  

	 
</project>

2、配置applicationContext.xml文件:

<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
 http://www.springframework.org/schema/tx 
 http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
 http://www.springframework.org/schema/aop 
 http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
 
   <!--  <import resource="/config/dubbo-provider.xml"/> -->
 
	<!-- properties加载 -->
    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath*:*.properties</value>
            </list>
        </property>
    </bean>
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="ignoreResourceNotFound" value="false" />
        <property name="properties" ref="configProperties" />
    </bean>  
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"  
        destroy-method="close"> 
         <!-- 基本属性 url、user、password -->  
        <property name="url" value="${url}" />  
        <property name="username" value="${username}" />  
        <property name="password" value="${password}" />  
        <property name="driverClassName" value="${driverClassName}" /> 
		 <!-- 配置初始化大小、最小、最大 --> 
		<property name="initialSize" value="${initialSize}" />
		<property name="minIdle" value="${minIdle}" />
        <property name="maxActive" value="${maxActive}" />
        <!-- 配置获取连接等待超时的时间 --> 
        <property name="maxWait" value="${maxWait}" />  
  		 <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> 
        <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" /> 
          <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->  
        <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />  
  
        <property name="validationQuery" value="${validationQuery}" />  
        <property name="testWhileIdle" value="${testWhileIdle}" />  
        <property name="testOnBorrow" value="${testOnBorrow}" />  
        <property name="testOnReturn" value="${testOnReturn}" />  
        <property name="maxOpenPreparedStatements"  value="${maxOpenPreparedStatements}" /> 
        <!-- 打开removeAbandoned功能 --> 
        <property name="removeAbandoned" value="${removeAbandoned}" /> 
        <!-- 1800秒,也就是30分钟 -->    
        <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" /> 
        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="${logAbandoned}" /> 
        <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->   
        <property name="filters" value="${filters}" />   
    </bean>
    
      <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
	       <property name="dataSource" ref="dataSource" />  
	       <property name="configLocation" value="mybatis-config.xml"/>   
	   </bean>
	   <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">  
	    	<constructor-arg index="0" ref="sqlSessionFactory" />  
	   </bean>
    
    
</beans>
注:数据库连接池用的是阿里的Druid,这跟DBCP,C3P0这些数据库连接池的配置总体差不多。

3、配置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>  
    <!-- 对事务的管理和连接池的配置 -->  
   <!--  <environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="oracle.jdbc.driver.OracleDriver" />  
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />  
                <property name="username" value="ibatis" />  
                <property name="password" value="ibatis" />  
            </dataSource>  
        </environment>  
    </environments>  --> 
      
    <!-- mapping 文件路径配置 -->  
    <mappers>
        <!-- 因为采用注解,所以直接指定包,自动扫描 -->
        <package name="com.blog.mapper"/>
    </mappers>  
</configuration>
4、创建数据库连接常量定义jdbc.properties
url:jdbc:mysql://localhost:3306/blog_news
driverClassName:com.mysql.jdbc.Driver
username:root
password:root
filters:stat
maxActive:20
initialSize:1
maxWait:60000
minIdle:10
#maxIdle:15
timeBetweenEvictionRunsMillis:60000
minEvictableIdleTimeMillis:300000
validationQuery:SELECT 'x'
testWhileIdle:true
testOnBorrow:false
testOnReturn:false
#poolPreparedStatements:true
maxOpenPreparedStatements:20
#对于长时间不使用的连接强制关闭
removeAbandoned:true
#超过30分钟开始关闭空闲连接
removeAbandonedTimeout:1800
#将当前关闭动作记录到日志
logAbandoned:true
5、日志配置

log4j.rootLogger=INFO,A1  
  
log4j.appender.A1=org.apache.log4j.ConsoleAppender  
log4j.appender.A1.layout=org.apache.log4j.PatternLayout  
log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss,SSS} [message] %m%n    
  
log4j.appender.A2=org.apache.log4j.FileAppender  
log4j.appender.A2.File=D:/log.log  
log4j.appender.A2.layout=org.apache.log4j.PatternLayout  
log4j.appender.A2.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss,SSS} [message] %m%n 
6、创建Mybatis的Mapper类UserMapper.java

package com.blog.mapper;

import java.util.Map;

import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;

import com.blog.model.User;
import com.blog.sqlprovider.UserSqlProvider;

public interface UserMapper {
	
	
	@InsertProvider(type=UserSqlProvider.class,method="addUser")
	public int addUser(@Param("params") Map<String,Object> params);
	
	@SelectProvider(type=UserSqlProvider.class,method="queryUser")
	public User queryUsreByUserNameAndPwd(@Param("params") Map<String, Object> params);

}
7、创建Mybatis的sql映射类UserSqlProvider.java:

package com.blog.sqlprovider;

import java.util.Map;

public class UserSqlProvider {
	
	public String addUser(Map<String,Object> params){
		StringBuilder sb=new StringBuilder("");
		sb.append("INSERT INTO user_main(userId,password)");
		sb.append(" VALUES(#{params.userId},#{params.password})");
		return sb.toString();
	}
	
	public String queryUser(Map<String,Object> params){
		StringBuilder sb=new StringBuilder("");
		sb.append("SELECT * FROM user_main ");
		sb.append(" where userId=#{params.userId} and password=#{params.password}");
		return sb.toString();
	}
}
8、另外需要用到的实体类User.java

package com.blog.model;

public class User {
	
	private int id;
	
	private String userId;
	
	private String password;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	

}

项目结构大致如下图:




Main测试类如下:

package com.blog.startup;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.blog.mapper.UserMapper;
import com.blog.model.User;

public class Main {
	
	public static void main(String[] args) throws IOException {
		
		ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("config/applicationContext.xml");
		SqlSessionTemplate sessionTemplate=(SqlSessionTemplate)applicationContext.getBean("sqlSessionTemplate");
		UserMapper userMapper= sessionTemplate.getMapper(UserMapper.class);
		
		Map<String,Object> param=new HashMap<String, Object>();
		param.put("userId", "10000001");
		param.put("password", "admin123456");
//		userMapper.addUser(param);
		
		User user=(User)userMapper.queryUsreByUserNameAndPwd(param);
		System.out.println("userId:"+user.getId()+",password:"+user.getPassword());
	}

}
数据库建表sql如下:

CREATE TABLE `user_main` (
  `id` int(11) NOT NULL auto_increment COMMENT '主键Id',
  `userId` varchar(12) NOT NULL COMMENT '用户Id',
  `password` varchar(64) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `unique_index_uerId` USING BTREE (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值