使用MyBatis+maven连接数据库
MyBatis连接数据库
以下所有步骤流程以及知识点是本人对此次学习的一次总结
首先了解下什么是Mabatis?
mybatis提供一种“半自动化”的ORM实现(ORM(Object/Relational Mapping)即对象/关系数据映射,可以理解为一种数据持久化技术)mybatis着力于POJO与SQL之间的映射关系,可以进行更为细致的SQL优化,可以减少查询字段。
mybatis框架执行流程图
上面的流程图已经对Mabatis的使用过程进行了大概的叙述,下面就由我亲自实践下!(IDEA)
创建Maven项目
简单介绍下Maven:Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven增加可重用性并负责建立相关的任务。
添加jar包
编写Maven中的pom.xml文件,添加需要使用的jar包,以下将要用到4个jar包,分别是:log4j.jar 打印日志文件,方便程序员日后调试;mybatis.jar获得mybatis库;junit.jar:测试项目;mysql-connector-java连接数据库。以下是pom.xml配置信息
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>cn.bdqn</groupId>
<artifactId>TestDemo1</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--为了获取mybatis库-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<!--打印日志文件,方便程序员日后调试-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<!--mysql连接数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.28</version>
</dependency>
<!--junit为了测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- build这个标签里的内容是为了读取到src/main/java这个目录下的xml文件-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
创建数据库和表
CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '用户名', `password` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '密码', `nick_name` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '昵称', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
编写database.properities文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/tcmp
jdbc.userName=root
jdbc.passWorld=123
配置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>
<!--引入database.properties文件中的信息-->
<properties resource="database.properties"></properties>
<!--配置log4j-->
<settings>
<setting name="logImpl" value="LOG4J"></setting>
</settings>
<!--typeAliases标签中package name可以直接查找到目录下的文件-->
<typeAliases>
<package name="cn.bdqn.entity"></package>
</typeAliases>
<!--环境配置-->
<environments default="dev">
<environment id="dev">
<!--事务管理-->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.userName}"></property>
<property name="password" value="${jdbc.passWorld}"></property>
</dataSource>
</environment>
</environments>
<!-- 通过resource加载单个的映射文件 -->
<mappers>
<mapper resource="cn/bdqn/dao/TuserMapper.xml"></mapper>
</mappers>
</configuration>
编写log4j文件
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
创建实体类Tuser,并封装数据
public class Tuser { private Integer id; private String userName,password,nickName; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public String toString() { return "Tuser{" + "id=" + id + ", userName='" + userName + '\'' + ", password='" + password + '\'' + ", nickName='" + nickName + '\'' + '}'; } }
配置映射文件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命名空间--> <mapper namespace="cn.bdqn.dao.TuserMapper"> <!--使用resultType进行输出映射时,只有查询输出结果列名和pojo中的属性名一致才可以,映射成功 --> <resultMap id="userMap" type="Tuser"> <id property="id" column="id"></id> <result property="userName" column="user_name"></result> <result property="password" column="password"></result> <result property="nickName" column="nick_name"></result> </resultMap> <!--select id取名和接口中的方法名相同--> <select id="queryCount" resultType="int"> SELECT COUNT(*) FROM t_user </select> <select id="queryAll" resultMap="userMap"> SELECT * FROM t_user </select> </mapper>创建接口TuserMapper(注意!接口名必须和映射文件取名相同)
package cn.bdqn.dao; import cn.bdqn.entity.Tuser; import java.util.List; /** * @param * @author * @data */ public interface TuserMapper { //查询表中数据条数 Integer queryCount(); //查询表中全部数据 List<Tuser> queryAll();
}
创建公用的MybatisUtil
package cn.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; /** * @param * @author * @data */ public class MybatisUtil { private static SqlSessionFactory sqlSessionFactory; static { try { //通过Resources获取mybatis的配置信息并读入io流中 InputStream in=Resources.getResourceAsStream("mybatis-config.xml"); //通过sqlSessionFactory创建SqlSessionFactoryBuilder() //通过build(in)把输入流中的in添加进来 sqlSessionFactory=new SqlSessionFactoryBuilder().build(in); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession createSqlSession(){ return sqlSessionFactory.openSession(); } public static void closeSqlSession(SqlSession sqlSession){ if(sqlSession!=null){ sqlSession.close(); } } }
测试
import cn.bdqn.dao.TuserMapper; import cn.bdqn.entity.Tuser; import cn.util.MybatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; /** * @param * @author * @data */ public class TestUser { @Test public void queryAll(){ SqlSession sqlSession=null; try { sqlSession=MybatisUtil.createSqlSession(); //List<Tuser> list=sqlSession.selectList("cn.bdqn.dao.TuserMapper.queryAll"); //通过getMapper完成映射 List<Tuser> list=sqlSession.getMapper(cn.bdqn.dao.TuserMapper.class).queryAll(); if(list!=null){ for (Tuser tuser : list) { System.out.println(tuser); } } } catch (Exception e) { e.printStackTrace(); }finally {
MybatisUtil.closeSqlSession(sqlSession); } } @Test public void queryCount(){ SqlSession sqlSession=null; try { sqlSession=MybatisUtil.createSqlSession(); //int n=sqlSession.selectOne("cn.bdqn.dao.TuserMapper.queryCount"); int n=sqlSession.getMapper(cn.bdqn.dao.TuserMapper.class).queryCount(); System.out.println(n); } catch (Exception e) { e.printStackTrace(); }finally { MybatisUtil.closeSqlSession(sqlSession); } } }