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>
五:项目整体视图
六:执行MybatisTest类,结果如下