Mybatis 快速入门
1、环境
JDK 1.8.0_111
Eclipse Neon
Tomcat 7
Sql server2008
所需jar:
2、配置
db.properties
jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc.url=jdbc:sqlserver://192.168.3.120:1433;databaseName=AnzhenTest jdbc.username=sa jdbc.password=sinopacs<?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的配置必须写在typeAliases的上面 --> <properties resource="db.properties"></properties> <!-- 和spring整合后 environments配置将废除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理,事务控制由mybatis管理--> <transactionManager type="JDBC" /> <!-- 数据库连接池,由mybatis管理--> <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> </environments> <!-- 加载映射文件 --> <mappers> <mapper resource="sqlmap/user.xml"/>
</mappers> </configuration>
log4j.properties
将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句,方便调试:
### 设置Logger输出级别和输出目的地 ###
log4j.rootLogger=debug,stdout,logfile
### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
### 把日志信息输出到文件:jbit.log ###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=jbit.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n
###显示SQL语句部分
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
sqlmap\user.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"> <!-- namespace命名空间,作用就是对sql进行分类化的管理,理解为sql隔离 注意:使用mapper代理开发时,namespace有特殊作用 --> <mapper namespace="src.main.resource.userMapper"> <resultMap id="BaseResultMap" type="com.mozi.entity.WebUser" > <id column="Name" property="name" jdbcType="VARCHAR" /> <result column="TrueName" property="trueName" jdbcType="VARCHAR" /> <result column="Pass" property="pass" jdbcType="VARCHAR" /> </resultMap> <sql id="Base_Column_List" > Name, TrueName, Pass </sql> <select id="findUserById" parameterType="int" resultType="com.mozi.entity.WebUser" > select * from WebUsers where id=#{id} </select> <select id="findUserByName" parameterType="java.lang.String" resultType="com.mozi.entity.WebUser" > select * from WebUsers where Name LIKE '%${value}%' </select> <select id="findUserByName2" parameterType="java.lang.String" resultMap ="BaseResultMap" > select * from WebUsers where Name LIKE '%${value}%' </select> <!-- 添加用户 --> <insert id="insertUser" parameterType="com.mozi.entity.WebUser" > <!-- 使用mysql的uuid(),实现非自增主键的返回。 执行过程:通过uuid()得到主键,将主键设置到user对象的Id的属性中,其次,在insert执行时,从user对象中取出Id属性值; --> insert into WebUsers (Name,TrueName,Pass) values(#{name},#{trueName},#{pass}) </insert> <!-- 删除用户 --> <delete id="deleteUser" parameterType="java.lang.String"> delete from WebUsers where Name=#{name} </delete> <!-- 更新用户 --> <update id="updateUser" parameterType="com.mozi.entity.WebUser"> update WebUsers set Name=#{name},TrueName=#{trueName},Pass=#{pass} where Name=#{name} </update> </mapper>
3、代码
WebUser.java
package com.mozi.entity; public class WebUser { private String name; private String trueName; private String pass; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTrueName() { return trueName; } public void setTrueName(String tureName) { this.trueName = tureName; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } @Override public String toString() { return "WebUser [Name=" + name + ", TureName=" + trueName + ", Pass=" + pass + "]"; } }
IWebUserDao.java
package com.mozi.dao; import java.util.List; import com.mozi.entity.*; public interface IWebUserDao { /**根据用户名称模糊查询用户信息*/ public List<WebUser> findUserByName(String username); /** 添加用户*/ public void insertUser(WebUser user); /** 根据ID删除用户*/ public void deleteUser(String id); /** 根据ID更新用户*/ public void updateUser(WebUser user); }
WebUserDaoMybatis.java
package com.mozi.dao.impl; import static org.junit.Assert.*; 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.mozi.dao.IWebUserDao; import com.mozi.entity.WebUser; import java.util.ArrayList; import java.util.List; public class WebUserDaoMybatis implements IWebUserDao { //查询用户 @Override public List<WebUser> findUserByName(String username) { // mybatis的配置文件 String resource = "SqlMapConfig.xml"; InputStream inputStream = null; SqlSession sqlSession = null; try { inputStream = Resources.getResourceAsStream(resource); // 1.创建会话工场,传入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 2.通过工厂得到SqlSession sqlSession = sqlSessionFactory.openSession(); // 3.通过sqlSession操作数据库 // 第一个参数:映射文件中的statement的Id,等于namespace + "." + statement的id; // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数; // sqlSession.selectOne结果是与映射文件所匹配的resultType类型的对象; List<Object> userList = (List) sqlSession.selectList("src.main.resource.userMapper.findUserByName2", "aa"); if(userList!=null) { List<WebUser> result=new ArrayList<WebUser>(); for(Object obj :userList){ WebUser user = (WebUser)obj; result.add(user); } return result; } } catch (IOException e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } // 添加用户 @Override public void insertUser(WebUser user) { // mybatis的配置文件 String resource = "SqlMapConfig.xml"; InputStream inputStream = null; SqlSession sqlSession = null; try { inputStream = Resources.getResourceAsStream(resource); // 1.创建会话工场,传入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 2.通过工厂得到SqlSession sqlSession = sqlSessionFactory.openSession(); // 3.通过sqlSession操作数据库 // 第一个参数:映射文件中的statement的Id,等于namespace + "." + statement的id; // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数; // sqlSession.selectOne结果是与映射文件所匹配的resultType类型的对象; sqlSession.insert("src.main.resource.userMapper.insertUser", user); //执行提交事务 sqlSession.commit(); } catch (IOException e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 根据Id删除用户 @Override public void deleteUser(String id) { // mybatis的配置文件 String resource = "SqlMapConfig.xml"; InputStream inputStream = null; SqlSession sqlSession = null; try { inputStream = Resources.getResourceAsStream(resource); // 1.创建会话工场,传入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 2.通过工厂得到SqlSession sqlSession = sqlSessionFactory.openSession(); // 3.通过sqlSession操作数据库 // 第一个参数:映射文件中的statement的Id,等于namespace + "." + statement的id; // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数; // sqlSession.selectOne结果是与映射文件所匹配的resultType类型的对象; //传入Id,删除用户 sqlSession.delete("src.main.resource.userMapper.deleteUser", id); //执行提交事务 sqlSession.commit(); } catch (IOException e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 根据Id更新用户信息 @Override public void updateUser(WebUser user) { // mybatis的配置文件 String resource = "SqlMapConfig.xml"; InputStream inputStream = null; SqlSession sqlSession = null; try { inputStream = Resources.getResourceAsStream(resource); // 1.创建会话工场,传入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 2.通过工厂得到SqlSession sqlSession = sqlSessionFactory.openSession(); // 3.通过sqlSession操作数据库 // 第一个参数:映射文件中的statement的Id,等于namespace + "." + statement的id; // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数; // sqlSession.selectOne结果是与映射文件所匹配的resultType类型的对象; //更具Id更新用户 sqlSession.update("src.main.resource.userMapper.updateUser", user); //执行提交事务 sqlSession.commit(); } catch (IOException e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }