一、简单了解Mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。(转载自百度百科)
Mybatis优势:
1、消除大量JDBC冗余代码
2、学习曲线低(学习相对容易)
3、友好的第三方缓存类库集成支持
4、有好的Spring集成支持
5、良好的性能
Mybatis劣势:
1、编写SQL语句的工作量大
2、数据库移植性差,不能随意更换数据库
二、Mybatis如何连接数据库
Mybatis连接数据库,首先需要数据库,使用最近学习使用的tcmp数据库其中的t_user表做一个示例
接下来就是重点了,使用Mybaits连接数据库
第一步:在核心配置文件(pom.xml)中导入jar包
<!--需要的依赖--> <dependencies> <!--连接数据库的jar包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.4</version> </dependency> <!--测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--用日志的形式打印测试结果,方便调试--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>
PS:核心配置文件中还需要配置<build>标签,这是idea的缺陷,虚拟机加载时无法加载src/mian/java下的.xml配置文件
<!--加载src/main/java目录下的所有.xml文件,这是idea的缺陷--> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>核心配置文件解决,做连接数据库的准备,在src/main/resources目录下创建database.properties文件内容如下:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/tcmp jdbc.username=root jdbc.password=6234
这个文件是方便连接数据库,更换数据库或数据库密码更换时更方便
接下来是与database.properties同目录下log4j.properties
log4j.rootLogger=DEBUG,CONSOLE,file log4j.logger.cn.smbms.dao=debug 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 log4j.logger.java.sql.ResultSet=debug log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=error log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.DatePattern=yyyy-MM-dd log4j.appender.file.File=log.log log4j.appender.file.Append=true log4j.appender.file.Threshold=error log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n log4j.logger.com.opensymphony.xwork2=error
src/main/resources目录下 全局配置文件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 resource="database.properties"/> <!--配置log4j--> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <!--设置entity包下的别名--> <typeAliases> <package name="com/bdqn/entity"/> </typeAliases> <!--配置环境--> <environments default="dev"> <!--环境变量:连接数据库--> <environment id="dev"> <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> </environments> </configuration>
配置结束后 com.bdqn.entity创建一个与数据库中t_user表相对应的实体类(上边有t_user表)
package com.bdqn.entity; //t_user表的实体类 public class TUser { private int id; private String userName , nickName , password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "TUser{" + "id=" + id + ", userName='" + userName + '\'' + ", nickName='" + nickName + '\'' + ", password='" + password + '\'' + '}'; } }
dao层(com.bdqn.dao) 创建TUserMapper.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.bdqn.dao.TUserMapper"> <!--防止实体类与数据库命名不一致--> <resultMap id="userMap" type="TUser"> <id column="id" property="id"/> <result column="user_name" property="userName"/> <result column="nick_name" property="nickName"/> <result column="password" property="password"/> </resultMap> <!--查询t_user表中数据行数--> <select id="queryCount" resultType="java.lang.Integer"> select count(*) from t_user </select> <!--查询t_user表中所有数据信息--> <select id="queryAll" resultMap="userMap"> select * from t_user </select> </mapper>
然后在全局配置文件中使用映射器(在<environments>标签后)
<!--映射器--> <mappers> <mapper resource="com/bdqn/dao/TUserMapper.xml"/> </mappers>
之后需要在dao层写一个接口 注意!!!接口名要与映射文件名相同,接口中方法名与<select>标签的id相同
package com.bdqn.dao; import com.bdqn.entity.TUser; import java.util.List; public interface TUserMapper { //查询t_user表中数据行数 int queryCount(); //查询t_user表中数据所有信息 List<TUser> queryAll();
}
util包中,创建MybatisUtil类
package com.bdqn.util; 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 java.io.IOException; import java.io.InputStream; //创建SqlSesison 关闭SqlSesison public class MybatisUtil { //创建SqlSessionFacroty工厂 private static SqlSessionFactory sqlSessionFactory; static{ try { //读取mybatis-config.xml输入流 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //工厂读取配置文件 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //创建SqlSession对象 public static SqlSession createSqlSession(){ return sqlSessionFactory.openSession(); } //关闭SqlSession 释放资源 public static void closeSqlSession(SqlSession sqlSession){ if(sqlSession != null){ sqlSession.close(); } } }最后src/main/test/java目录下创建测试类TUserTest 请记住一定要在finally中释放资源
import com.bdqn.dao.TUserMapper; import com.bdqn.entity.TUser; import com.bdqn.util.MybatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; //测试类 public class TUserTest { //查询t_user表中数据行数 @Test public void tUserCountTest(){ //创建SqlSession对象 SqlSession sqlSession = null; int count = 0; try { sqlSession = MybatisUtil.createSqlSession(); //查询t_user表中数据行数 count = sqlSession.getMapper(TUserMapper.class).queryCount(); System.out.println(count); } catch (Exception e) { e.printStackTrace(); } finally { //释放资源 MybatisUtil.closeSqlSession(sqlSession); } } //查询t_user表中数据所有信息 @Test public void tUserAllTest(){ //创建SqlSession对象 SqlSession sqlSession = null; try { sqlSession = MybatisUtil.createSqlSession(); //查询t_user表中数据所有信息 List<TUser> list = sqlSession.getMapper(TUserMapper.class).queryAll(); for (TUser tUser : list) { System.out.println(tUser); } } catch (Exception e) { e.printStackTrace(); } finally { //释放资源 MybatisUtil.closeSqlSession(sqlSession); } } }我们来分别看一下测试结果
tUserCountTest()方法的测试结果如下
tUserAllTest()方法的测试结果如下
此阶段在Mybatis连接数据库的学习中的总结,仅供参考,如有不妥,欢迎指教!