本文主要介紹一個現在比較流行的數據庫操作框架Mybatis,只是簡單的介紹入門用法
全部代碼下載:
Github鏈接:鏈接
寫文章不易,歡迎大家採我的文章,以及給出有用的評論,當然大家也可以關注一下我的github;多謝;
1.MyBatis 是什麼?
MyBatis 是一款一流的支持自定義 SQL、存儲過程和高級映射的持久化框架。MyBatis 幾乎消除了所有的 JDBC 代碼,也基本不需要手工去設置參數和獲取檢索結果。MyBatis 能夠使用簡單的XML 格式或者註解進行來配置,能夠映射基本數據元素、Map 接口和 POJOs(普通 java 對象)到數據庫中的記錄。
2.建立工程和導入jar包
建立java工程,當然也可以動態web工程
帶入jar包:
主要兩個包:mybatis-3.1.1.jar和mysql-connector-java-5.1.37-bin.jar
3.在mysql創建對應的表
建立一個數據庫表:students
--mysql語法
create table students(
id int(5) primary key,
name varchar(10),
sal double(8,2)
);
4.創建和表對應的實體類
在工程中建立student類
public class Student {
private Integer id;//編號
private String name;//姓名
private Double sal;//薪水
public Student(){}
public Student(Integer id, String name, Double sal) {
this.id = id;
this.name = name;
this.sal = sal;
}
。。。。。
此處省略了get和set方法
5.在studnet類對應的包下建立StudentMapper.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屬性是名稱空間,必須唯一,一般爲類名 -->
<mapper namespace="com.rlovep.hello.Student">
<!-- resultMap標籤:映射實體與表
type屬性:表示實體全路徑名
id屬性:爲實體與表的映射取一個任意的唯一的名字
-->
<resultMap type="com.rlovep.hello.Student" id="studentMap">
<!-- id標籤:映射主鍵屬性
result標籤:映射非主鍵屬性
property屬性:實體的屬性名
column屬性:表的字段名
-->
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="sal" column="sal"/>
</resultMap>
<!--
insert標籤:要書寫insert這麼一個sql語句
id屬性:爲insert這麼一個sql語句取一個任意唯一的名字
parameterType:要執行的dao中的方法的參數,如果是類的話,必須使用全路徑類
-->
<insert id="add1">
insert into students(id,name,sal) value(1,'peace',5000)
</insert>
<!-- <insert id="com.rlovep.hello.Student">
insert into students(id,name,sal) values(#{id},#{name},#{sal})
</insert> -->
</mapper>
6.在src目錄下建立mybatis的配置文件mybatis.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>
<!-- 設置一個默認的連接環境信息 -->
<environments default="mysql_developer">
<!-- 連接環境信息,取一個任意唯一的名字 -->
<environment id="mysql_developer">
<!-- mybatis使用jdbc事務管理方式 -->
<transactionManager type="jdbc"/>
<!-- mybatis使用連接池方式來獲取連接 -->
<dataSource type="pooled">
<!-- 配置與數據庫交互的4個必要屬性 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/day01?useUnicode=true&characterEncoding=UTF8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<!-- 連接環境信息,取一個任意唯一的名字 -->
<environment id="oracle_developer">
<!-- mybatis使用jdbc事務管理方式 -->
<transactionManager type="jdbc"/>
<!-- mybatis使用連接池方式來獲取連接 -->
<dataSource type="pooled">
<!-- 配置與數據庫交互的4個必要屬性 -->
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="username" value="$username"/>
<property name="password" value="oracle.password"/>
</dataSource>
</environment>
</environments>
<!-- 加載映射文件-->
<mappers>
<mapper resource="com/rlovep/hello/StudentMapper.xml"/>
</mappers>
</configuration>
7)創建MyBatisUtil.java類,並測試與數據庫是否能連接
建立com.rlovep.util包,並在包下建立MyBatisUtil.java類(可以創建在任何地方)
package com.rlovep.util;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
*
* @ClassName: MyBatisUtil
* @Description: 創建單例工廠,可以獲得線程session
* @author peace [email protected]
* @date 27 Mar 2016 10:01:45 pm
*
*/
public class MyBatisUtil {
// 創建線程獨立的session
private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
// sqlsession 工廠
private static SqlSessionFactory sqlSessionFactory;
/**
* 加載位於src/mybatis.xml配置文件
*/
static {
try {
// 獲得配置文件字符流
Reader reader = Resources.getResourceAsReader("mybatis.xml");
// 通過配置文件創建工廠
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
*
* <p>
* Title:
* </p>
* <p>
* Description:禁止外界new 該工具類
* </p>
*/
private MyBatisUtil() {
}
/**
* 獲取session,線程獨立
*/
public static SqlSession getSqlsession() {
// 從當前線程中獲取SqlSession對象
SqlSession sqlSession = threadLocal.get();
// 如果SqlSession對象爲空
if (sqlSession == null) {
// 在SqlSessionFactory非空的情況下,獲取SqlSession對象
sqlSession = sqlSessionFactory.openSession();
// 將SqlSession對象與當前線程綁定在一起
threadLocal.set(sqlSession);
}
// 返回SqlSession對象
return sqlSession;
}
/**
* 關閉SqlSession與當前線程分開
*/
public static void closeSqlSession() {
// 從當前線程中獲取SqlSession對象
SqlSession sqlSession = threadLocal.get();
// 如果SqlSession對象非空
if (sqlSession != null) {
// 關閉SqlSession對象
sqlSession.close();
// 分開當前線程與SqlSession對象的關係,目的是讓GC儘早回收
threadLocal.remove();
}
}
public static void main(String[] args) {
Connection conn = MyBatisUtil.getSqlsession().getConnection();
System.out.println(conn!=null?"連接成功":"連接失敗");
}
}
8.在student類的包下建立StudentDao.java類並測試
public class StudentDao {
public void add1()throws Exception{
SqlSession sqlSession=null;
try{
//獲得sqlsession
sqlSession=MyBatisUtil.getSqlsession();
//默認事務開始
//調用在映射文件中聲明的方法
int i=sqlSession.insert("com.rlovep.hello.Student.add1");
System.out.println("影響了"+i+"行");
//事務提交
sqlSession.commit();
}catch(Exception e)
{
e.printStackTrace();
//事務回滾
sqlSession.rollback();
throw e;
}finally {
MyBatisUtil.closeSqlSession();
}
}
public static void main(String[] args) throws Exception{
StudentDao dao=new StudentDao();
dao.add1();
}
}
9.測試如下
控制檯的輸出如下:
影響了1行
數據庫增加了一行
10開啓log4j
1.導入jar包:log4j-1.2.17.jar
2.在src目錄下:建立log4j.properties
log4j.rootLogger=debug,stdout,logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n
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
3.直接運行即可,不需要在配置,控制檯顯示如下:
好的本章介紹到這裏
來自伊豚wpeace(rlovep.com,blog.wpeace.cn)