Mybatis入门代码

一:建立数据库

create database ssm;
use ssm;
create table role (id int,roleName char(10),note char(10));
insert into role values(1,'Tom','English');

二:新建包:

1:main

2:mapper

3:myDatabaseIdProvider

4:myDataSourceFactory

5:myObjectFactory

6:myTransaction

7:myTypeHandler

8:pojo

9:utils

三:新建类

1:main包下:

(1)MybatisTest类

package main;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;

import mapper.RoleMapper;
import pojo.Role;
import utils.SqlSessionFactoryUtils;

public class MybatisTest {

	public static void main(String[] args) {
		Logger log=Logger.getLogger(main.MybatisTest.class);
		SqlSession sqlSession=null;
		try {
			sqlSession=SqlSessionFactoryUtils.openSqlSession();
			RoleMapper roleMapper=sqlSession.getMapper(RoleMapper.class);
			Role role=roleMapper.getRole(1);
			log.info(role.getRoleName());
			sqlSession.commit();
		}catch (Exception e) {
			// TODO: handle exception
		}finally {
			if(sqlSession!=null) {
				sqlSession.close();
			}
		}
	}

}

2:mapper包下:

(1):RoleMapper类

package mapper;

import java.util.List;

import pojo.Role;

public interface RoleMapper {
	public int insertRole(Role role);
	public int deleteRole(int id);
	public int updateRole(Role role);
	public Role getRole(int id);
	public List<Role> findRoles(String roleName);
}

(2):RoleMapper.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="mapper.RoleMapper">
	
	<resultMap type="role" id="roleMapper">
		<result property="id" column="id"/>
		<result property="roleName" column="roleName" typeHandler="myTypeHandler.MyTypeHandler"/>
		<result property="note" column="note" typeHandler="myTypeHandler.MyTypeHandler"/>
	</resultMap>
	
	<delete id="deleteRole" parameterType="_int">
		delete from role where id=#{id}
	</delete>
	
	<update id="updateRole" parameterType="role">
		update role set roleName=#{roleName},node=#{node} where id=#{id}
	</update>
	
	<select id="getRole" parameterType="_int" resultMap="roleMapper" databaseId="mysql">
		select * from role where id=#{id};
	</select>
	
	
	<select id="getRole" parameterType="_int" resultMap="roleMapper" databaseId="oracle">
		select * from role where id=#{id};
	</select>
	
	<select id="findRoles" parameterType="string" resultMap="roleMapper">
		select * from role where roleName like concat('%',#{roleName},'%')
	</select>
</mapper>

3:myDatabaseIdProvider包下:

(1):MyDatabaseIdProvider类

package myDatabaseIdProvider;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.log4j.Logger;

public class MyDatabaseIdProvider implements DatabaseIdProvider{

	private static final String DB2="DB2";
	private static final String MYSQL="MySQL";
	private static final String ORACLE="Oracle";
	
	private Logger log=Logger.getLogger(MyDatabaseIdProvider.class);
	@Override
	public String getDatabaseId(DataSource dataSource) throws SQLException {
		// TODO Auto-generated method stub
		Connection connection=dataSource.getConnection();
		String dbProductName=connection.getMetaData().getDatabaseProductName();
		if(MyDatabaseIdProvider.DB2.equals(dbProductName))
		{
			return "db2";
		}
		else if(MyDatabaseIdProvider.MYSQL.equals(dbProductName))
		{
			return "mysql";
		}
		else if(MyDatabaseIdProvider.ORACLE.equals(dbProductName))
		{
			return "oracle";
		}
		else
		{
			return null;
		}
	}

	@Override
	public void setProperties(Properties props) {
		// TODO Auto-generated method stub
		log.info(props);
	}

}

4:myDataSourceFactory包下

(1):DbcpDataSourceFactory类

package myDataSourceFactory;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.apache.ibatis.datasource.DataSourceFactory;

public class DbcpDataSourceFactory implements DataSourceFactory{
	private Properties props=null;

	@Override
	public DataSource getDataSource() {
		// TODO Auto-generated method stub
		DataSource dataSource=null;
		try {
			dataSource=BasicDataSourceFactory.createDataSource(props);
		}catch (Exception e) {
			// TODO: handle exception
		}
		return dataSource;
	}

	@Override
	public void setProperties(Properties props) {
		// TODO Auto-generated method stub
		this.props=props;
	}
	
}

5:myObjectFactory包下

(1):MyObjectFactory类

package myObjectFactory;

import java.util.List;
import java.util.Properties;

import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
import org.apache.log4j.Logger;

public class MyObjectFactory extends DefaultObjectFactory{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	Logger log=Logger.getLogger(MyObjectFactory.class);
	private Object temp=null;
	
	@Override
	public void setProperties(Properties properties)
	{
		super.setProperties(properties);
		log.info("初始化参数:"+properties.toString());
	}
	
	@Override
	public <T> T create(Class<T> type)
	{
		T result=super.create(type);
		log.info("是否和上次创建的是同一个对象"+result==temp);
		return result;
	}
	
	@Override
	public <T> T create(Class<T> type,List<Class<?>> constructorArgTypes,List<Object> constructorArgs) {
		T result=super.create(type, constructorArgTypes, constructorArgs);
		log.info("创建对象"+result.toString());
		temp=result;
		return result;
	}
	
	@Override
	public <T> boolean isCollection(Class<T> type) {
		// TODO Auto-generated method stub
		return super.isCollection(type);
	}
}

6:myTransaction包下

(1):MyTransaction类

package myTransaction;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.ibatis.session.TransactionIsolationLevel;
import org.apache.ibatis.transaction.Transaction;
import org.apache.ibatis.transaction.jdbc.JdbcTransaction;

public class MyTransaction extends JdbcTransaction implements Transaction{

	
	public MyTransaction(DataSource ds, TransactionIsolationLevel desiredLevel, boolean desiredAutoCommit) {
		super(ds, desiredLevel, desiredAutoCommit);
		// TODO Auto-generated constructor stub
	}
   
	public MyTransaction(Connection connection) {
		super(connection);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void close() throws SQLException {
		// TODO Auto-generated method stub
		super.close();
	}

	@Override
	public void commit() throws SQLException {
		// TODO Auto-generated method stub
		super.commit();
	}

	@Override
	public Connection getConnection() throws SQLException {
		// TODO Auto-generated method stub
		return super.getConnection();
	}

	@Override
	public void rollback() throws SQLException {
		// TODO Auto-generated method stub
		super.rollback();
	}
	
}

(2):MyTransactionFactory类

package myTransaction;

import java.sql.Connection;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.ibatis.session.TransactionIsolationLevel;
import org.apache.ibatis.transaction.Transaction;
import org.apache.ibatis.transaction.TransactionFactory;

public class MyTransactionFactory implements TransactionFactory{

	@Override
	public Transaction newTransaction(Connection connection) {
		// TODO Auto-generated method stub
		return new MyTransaction(connection);
	}

	@Override
	public Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit) {
		return new MyTransaction(dataSource,level,autoCommit);
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setProperties(Properties props) {
		// TODO Auto-generated method stub
		
	}


}

7:myTypeHandler包下

(1):MyTypeHandler类

package myTypeHandler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import org.apache.log4j.Logger;

public class MyTypeHandler implements TypeHandler<String> {
	Logger logger=Logger.getLogger(MyTypeHandler.class);
	@Override
	public String getResult(ResultSet rs, String columnName) throws SQLException {
		// TODO Auto-generated method stub
		String result=rs.getString(columnName);
		logger.info("读取了String参数1:"+result);
		return result;
	}

	@Override
	public String getResult(ResultSet rs, int columnIndex) throws SQLException {
		// TODO Auto-generated method stub
		String result=rs.getString(columnIndex);
		logger.info("读取了String参数2:"+result);
		return result;
	}

	@Override
	public String getResult(CallableStatement cs, int columnIndex) throws SQLException {
		// TODO Auto-generated method stub
		String result=cs.getString(columnIndex);
		logger.info("读取了String参数3:"+result);
		return result;
	}

	@Override
	public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
		// TODO Auto-generated method stub
		logger.info("设置String参数:"+parameter);
		ps.setString(i, parameter);
	}

}

8:pojo包下

(1):Role类

package pojo;

public class Role {
	private int id;
	private String roleName;
	private String note;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getRoleName() {
		return roleName;
	}
	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}
	public String getNote() {
		return note;
	}
	public void setNote(String note) {
		this.note = note;
	}
	
}

9:utils包下

(1):SqlSessionFactoryUtils类

package utils;

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;

public class SqlSessionFactoryUtils {
	private static final Class<SqlSessionFactoryUtils> LOCK = SqlSessionFactoryUtils.class;
	private static SqlSessionFactory sqlSessionFactory=null;
	private SqlSessionFactoryUtils() {
		
	}
	public static SqlSessionFactory getSqlSessionFactory() {
		synchronized (LOCK) {
			if(sqlSessionFactory!=null)
			{
				return sqlSessionFactory;
			}
		}
		String resource="mybatis-config.xml";
		InputStream inputStream;
		try {
			inputStream=Resources.getResourceAsStream(resource);
			sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
		}catch (IOException e) {
			e.printStackTrace();
			return null;
		}
		return sqlSessionFactory;
	}
	public static SqlSession openSqlSession() {
		if(sqlSessionFactory==null)
		{
			getSqlSessionFactory();
		}
		return sqlSessionFactory.openSession();
	}
}

三:配置log4j日志

src下新建log4j.properties文件,并进行如下配置

log4j.rootLogger=DEBUG,stdout
log4j.logger.org.mybatis=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n

四:配置Mybatis

src下新建文件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>
	<properties>
		<property name="database.driver" value="com.mysql.jdbc.Driver"/>
		<property name="database.url" value="jdbc:mysql://localhost:3306/ssm"/>
		<property name="database.username" value="root"/>
		<property name="database.password" value="root"/>
	</properties>


	<typeAliases>
		<typeAlias alias="role" type="pojo.Role"/>
	</typeAliases>
	
	<typeHandlers>
		<typeHandler  jdbcType="VARCHAR" javaType="String" handler="myTypeHandler.MyTypeHandler"/>
	</typeHandlers>
	
	<objectFactory type="myObjectFactory.MyObjectFactory">
		<property name="prop1" value="value1"/>
	</objectFactory>
	
	<environments default="development">
	    <environment id="development">
	      <transactionManager type="myTransaction.MyTransactionFactory"/>
	      <dataSource type="myDataSourceFactory.DbcpDataSourceFactory">
	        <property name="driver" value="${database.driver}"/>
	        <property name="url" value="${database.url}"/>
	        <property name="username" value="${database.username}"/>
	        <property name="password" value="${database.password}"/>
	      </dataSource>
	    </environment>
	</environments>
	
	<!--<databaseIdProvider type="DB_VENDOR">
		<property name="Oracle" value="oracle"/>
		<property name="MySQL" value="mysql"/>
		<property name="DB2" value="db2"/>
	</databaseIdProvider>-->
	
	<databaseIdProvider type="myDatabaseIdProvider.MyDatabaseIdProvider">
		<property name="msg" value="自定义DatabaseIdProvider"/>
	</databaseIdProvider>
    <mappers>
        <!--<mapper resource="mapper/RoleMapper.xml"/>-->
        <package  name="mapper"/>
        <!--<mapper class="mapper.RoleMapper"/>-->
    </mappers> 
</configuration>

五:项目整体视图

Mybatis入门代码

六:执行MybatisTest类,结果如下

Mybatis入门代码