程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java+Spring+MySql情況中裝置和設置裝備擺設MyBatis的教程

Java+Spring+MySql情況中裝置和設置裝備擺設MyBatis的教程

編輯:關於JAVA

Java+Spring+MySql情況中裝置和設置裝備擺設MyBatis的教程。本站提示廣大學習愛好者:(Java+Spring+MySql情況中裝置和設置裝備擺設MyBatis的教程)文章只能為提供參考,不一定能成為您想要的結果。以下是Java+Spring+MySql情況中裝置和設置裝備擺設MyBatis的教程正文


1.MyBatis簡介與設置裝備擺設MyBatis+Spring+MySql

1.1MyBatis簡介
      MyBatis 是一個可以自界說SQL、存儲進程和高等映照的耐久層框架。MyBatis 摒除年夜部門的JDBC代碼、手工設置參數和成果集重獲。MyBatis 只應用簡略的XML 和注解來設置裝備擺設和映照根本數據類型、Map 接口和POJO 到數據庫記載。絕對Hibernate和Apache OJB等“一站式”ORM處理計劃而言,Mybatis 是一種“半主動化”的ORM完成。
須要應用的Jar包:mybatis-3.0.2.jar(mybatis焦點包)。mybatis-spring-1.0.0.jar(與Spring聯合包)。
下載地址:
http://ibatis.apache.org/tools/ibator
http://code.谷歌.com/p/mybatis/
 
1.2MyBatis+Spring+MySql簡略設置裝備擺設
1.2.1搭建Spring情況
(1)樹立maven的web項目;
(2)參加Spring框架、設置裝備擺設文件;
(3)在pom.xml中參加所須要的jar包(spring框架的、mybatis、mybatis-spring、junit等);
(4)更改web.xml和spring的設置裝備擺設文件;
(5)添加一個jsp頁面和對應的Controller;
(6)測試。
可參照:http://limingnihao.iteye.com/blog/830409。應用Eclipse的Maven構建SpringMVC項目

1.2.2樹立MySql數據庫
樹立一個先生選課治理數據庫。
表:先生表、班級表、教員表、課程表、先生選課表。
邏輯關系:每一個先生有一個班級;每一個班級對應一個班主任教員;每一個教員只能當一個班的班主任;
應用上面的sql停止建數據庫,先樹立先生表,拔出數據(2條以上)。
更多sql請下載項目源文件,在resource/sql中。

/* 樹立數據庫 */ 
CREATE DATABASE STUDENT_MANAGER; 
USE STUDENT_MANAGER; 
 
/***** 樹立student表 *****/ 
CREATE TABLE STUDENT_TBL 
( 
  STUDENT_ID     VARCHAR(255) PRIMARY KEY, 
  STUDENT_NAME    VARCHAR(10) NOT NULL, 
  STUDENT_SEX    VARCHAR(10), 
  STUDENT_BIRTHDAY  DATE, 
  CLASS_ID      VARCHAR(255) 
); 
 
/*拔出先生數據*/ 
INSERT INTO STUDENT_TBL (STUDENT_ID, 
             STUDENT_NAME, 
             STUDENT_SEX, 
             STUDENT_BIRTHDAY, 
             CLASS_ID) 
 VALUES  (123456, 
      '某某某', 
      '女', 
      '1980-08-01', 
      121546 
      ) 

 

創立銜接MySql應用的設置裝備擺設文件mysql.properties。

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://localhost:3306/student_manager?user=root&password=limingnihao&useUnicode=true&characterEncoding=UTF-8 

 
 1.2.3搭建MyBatis情況
次序隨意,如今的次序是由於可以盡可能的少的修正寫好的文件。

1.2.3.1創立實體類: StudentEntity

public class StudentEntity implements Serializable { 
 
  private static final long serialVersionUID = 3096154202413606831L; 
  private ClassEntity classEntity; 
  private Date studentBirthday; 
  private String studentID; 
  private String studentName; 
  private String studentSex; 
   
  public ClassEntity getClassEntity() { 
    return classEntity; 
  } 
 
  public Date getStudentBirthday() { 
    return studentBirthday; 
  } 
 
  public String getStudentID() { 
    return studentID; 
  } 
 
  public String getStudentName() { 
    return studentName; 
  } 
 
  public String getStudentSex() { 
    return studentSex; 
  } 
 
  public void setClassEntity(ClassEntity classEntity) { 
    this.classEntity = classEntity; 
  } 
 
  public void setStudentBirthday(Date studentBirthday) { 
    this.studentBirthday = studentBirthday; 
  } 
 
  public void setStudentID(String studentID) { 
    this.studentID = studentID; 
  } 
 
  public void setStudentName(String studentName) { 
    this.studentName = studentName; 
  } 
 
  public void setStudentSex(String studentSex) { 
    this.studentSex = studentSex; 
  } 
} 

1.2.3.2創立數據拜訪接口
Student類對應的dao接口:StudentMapper。

public interface StudentMapper { 
   
  public StudentEntity getStudent(String studentID); 
   
  public StudentEntity getStudentAndClass(String studentID); 
   
  public List<StudentEntity> getStudentAll(); 
   
  public void insertStudent(StudentEntity entity); 
   
  public void deleteStudent(StudentEntity entity); 
   
  public void updateStudent(StudentEntity entity); 
} 

1.2.3.3創立SQL映照語句文件

Student類的sql語句文件StudentMapper.xml
resultMap標簽:表字段與屬性的映照。
Select標簽:查詢sql。

<?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.manager.data.StudentMapper"> 
 
  <resultMap type="StudentEntity" id="studentResultMap"> 
    <id property="studentID" column="STUDENT_ID"/> 
    <result property="studentName" column="STUDENT_NAME"/> 
    <result property="studentSex" column="STUDENT_SEX"/> 
    <result property="studentBirthday" column="STUDENT_BIRTHDAY"/> 
  </resultMap> 
   
  <!-- 查詢先生,依據id --> 
  <select id="getStudent" parameterType="String" resultType="StudentEntity" resultMap="studentResultMap"> 
    <![CDATA[ 
      SELECT * from STUDENT_TBL ST 
        WHERE ST.STUDENT_ID = #{studentID} 
    ]]>  
  </select> 
   
  <!-- 查詢先生列表 --> 
  <select id="getStudentAll" resultType="com.manager.data.model.StudentEntity" resultMap="studentResultMap"> 
    <![CDATA[ 
      SELECT * from STUDENT_TBL 
    ]]>  
  </select> 
   
</mapper> 

1.2.3.4創立MyBatis的mapper設置裝備擺設文件
在src/main/resource中創立MyBatis設置裝備擺設文件:mybatis-config.xml。
typeAliases標簽:給類起一個體名。com.manager.data.model.StudentEntity類,可使用StudentEntity取代。
Mappers標簽:加載MyBatis中實體類的SQL映照語句文件。

<?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> 
  <typeAliases> 
    <typeAlias alias="StudentEntity" type="com.manager.data.model.StudentEntity"/> 
  </typeAliases> 
  <mappers> 
    <mapper resource="com/manager/data/maps/StudentMapper.xml" /> 
  </mappers> 
</configuration>  

1.2.3.5修正Spring 的設置裝備擺設文件
重要是添加SqlSession的制造工場類的bean:SqlSessionFactoryBean,(在mybatis.spring包中)。須要指定設置裝備擺設文件地位和dataSource。
和數據拜訪接口對應的完成bean。經由過程MapperFactoryBean創立出來。須要履行接口類全稱和SqlSession工場bean的援用。

<!-- 導入屬性設置裝備擺設文件 --> 
<context:property-placeholder location="classpath:mysql.properties" /> 
 
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
  <property name="driverClassName" value="${jdbc.driverClassName}" /> 
  <property name="url" value="${jdbc.url}" /> 
</bean> 
 
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
  <property name="dataSource" ref="dataSource" /> 
</bean> 
 
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
  <property name="configLocation" value="classpath:mybatis-config.xml" /> 
  <property name="dataSource" ref="dataSource" /> 
</bean> 
 
<!— mapper bean --> 
<bean id="studentMapper" class="org.mybatis.spring.MapperFactoryBean"> 
  <property name="mapperInterface" value="com.manager.data.StudentMapper" /> 
  <property name="sqlSessionFactory" ref="sqlSessionFactory" /> 
</bean> 

也能夠不界說mapper的bean,應用注解:
將StudentMapper參加注解

@Repository 
@Transactional 
public interface StudentMapper { 
} 

對應的須要在dispatcher-servlet.xml中參加掃描:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
  <property name="annotationClass" value="org.springframework.stereotype.Repository"/> 
  <property name="basePackage" value="com.liming.manager"/> 
  <property name="sqlSessionFactory" ref="sqlSessionFactory"/> 
</bean> 

1.2.4測試StudentMapper
應用SpringMVC測試,創立一個TestController,設置裝備擺設tomcat,拜訪index.do頁面停止測試:

@Controller 
public class TestController { 
 
  @Autowired 
  private StudentMapper studentMapper; 
   
  @RequestMapping(value = "index.do") 
  public void indexPage() {   
    StudentEntity entity = studentMapper.getStudent("10000013"); 
    System.out.println("name:" + entity.getStudentName()); 
  }   
} 

應用Junit測試:

@RunWith(value = SpringJUnit4ClassRunner.class) 
@ContextConfiguration(value = "test-servlet.xml") 
public class StudentMapperTest { 
   
  @Autowired 
  private ClassMapper classMapper; 
   
  @Autowired 
  private StudentMapper studentMapper; 
   
  @Transactional 
  public void getStudentTest(){ 
    StudentEntity entity = studentMapper.getStudent("10000013"); 
    System.out.println("" + entity.getStudentID() + entity.getStudentName()); 
     
    List<StudentEntity> studentList = studentMapper.getStudentAll(); 
    for( StudentEntity entityTemp : studentList){ 
      System.out.println(entityTemp.getStudentName()); 
    } 
     
  } 
} 

2.MyBatis的主設置裝備擺設文件
在界說sqlSessionFactory時須要指定MyBatis主設置裝備擺設文件:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
  <property name="configLocation" value="classpath:mybatis-config.xml" /> 
  <property name="dataSource" ref="dataSource" /> 
</bean> 

MyBatis設置裝備擺設文件中年夜標簽configuration下子標簽包含:

configuration
|--- properties
|--- settings
|--- typeAliases
|--- typeHandlers
|--- objectFactory
|--- plugins
|--- environments
|--- |--- environment
|--- |--- |--- transactionManager
|--- |--- |__ dataSource
|__ mappers

2.1 properties屬性

    properties和java的.properties的設置裝備擺設文件有關。設置裝備擺設properties的resource指定.properties的途徑,然後再在properties標簽下設置裝備擺設property的name和value,則可以調換.properties文件中響應屬性值。

  <!-- 屬性調換 --> 
<properties resource="mysql.properties"> 
  <property name="jdbc.driverClassName" value="com.mysql.jdbc.Driver"/> 
  <property name="jdbc.url" value="jdbc:mysql://localhost:3306/student_manager"/> 
  <property name="username" value="root"/> 
  <property name="password" value="limingnihao"/> 
</properties> 

 
2.2 settings設置
這是MyBatis 修正操作運轉進程細節的主要的步調。下方這個表格描寫了這些設置項、寄義和默許值。

_byte

byte

_long

long

_short

short

_int

int

_integer

int

_double

double

_float

float

_boolean

boolean

string

String

byte

Byte

long

Long

short

Short

int

Integer

integer

Integer

double

Double

float

Float

boolean

Boolean

date

Date

decimal

BigDecimal

bigdecimal

BigDecimal

object

Object

map

Map

hashmap

HashMap

list

List

arraylist

ArrayList

collection

Collection

iterator

Iterator

2.4 typeHandlers類型句柄
不管是MyBatis在預處置語句中設置一個參數,照樣從成果集中掏出一個值時,類型處置器被用來將獲得的值以適合的方法轉換成Java類型。上面這個表格描寫了默許的類型處置器。

BooleanTypeHandler

Boolean,boolean

任何兼容的布爾值

ByteTypeHandler

Byte,byte

任何兼容的數字或字節類型

ShortTypeHandler

Short,short

任何兼容的數字或短整型

IntegerTypeHandler

Integer,int

任何兼容的數字和整型

LongTypeHandler

Long,long

任何兼容的數字或長整型

FloatTypeHandler

Float,float

任何兼容的數字或單精度浮點型

DoubleTypeHandler

Double,double

任何兼容的數字或雙精度浮點型

BigDecimalTypeHandler

BigDecimal

任何兼容的數字或十進制小數類型

StringTypeHandler

String

CHAR和VARCHAR類型

ClobTypeHandler

String

CLOB和LONGVARCHAR類型

NStringTypeHandler

String

NVARCHAR和NCHAR類型

NClobTypeHandler

String

NCLOB類型

ByteArrayTypeHandler

byte[]

任何兼容的字撙節類型

BlobTypeHandler

byte[]

BLOB和LONGVARBINARY類型

DateTypeHandler

Date(java.util)

TIMESTAMP類型

DateOnlyTypeHandler

Date(java.util)

DATE類型

TimeOnlyTypeHandler

Date(java.util)

TIME類型

SqlTimestampTypeHandler

Timestamp(java.sql)

TIMESTAMP類型

SqlDateTypeHandler

Date(java.sql)

DATE類型

SqlTimeTypeHandler

Time(java.sql)

TIME類型

ObjectTypeHandler

Any

其他或未指定類型

EnumTypeHandler

Enumeration類型

VARCHAR-任何兼容的字符串類型,作為代碼存儲(而不是索引)。


 
你可以重寫類型處置器或創立你本身的類型處置器來處置不支撐的或非尺度的類型。要如許做的話,簡略完成TypeHandler接口(org.mybatis.type),然後映照新的類型處置器類到Java類型,還有可選的一個JDBC類型。然後再typeHandlers中添加這個類型處置器。
新界說的類型處置器將會籠罩曾經存在的處置Java的String類型屬性和VARCHAR參數及成果的類型處置器。要留意MyBatis不會審閱數據庫元信息來決議應用哪一種類型,所以你必需在參數和成果映照中指定那是VARCHAR類型的字段,來綁定到准確的類型處置器上。這是由於MyBatis直到語句被履行都不曉得數據類型的這個實際招致的。

public class LimingStringTypeHandler implements TypeHandler { 
 
  @Override 
  public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { 
    System.out.println("setParameter - parameter: " + ((String) parameter) + ", jdbcType: " + jdbcType.TYPE_CODE); 
    ps.setString(i, ((String) parameter)); 
  } 
 
  @Override 
  public Object getResult(ResultSet rs, String columnName) throws SQLException { 
    System.out.println("getResult - columnName: " + columnName); 
    return rs.getString(columnName); 
  } 
 
  @Override 
  public Object getResult(CallableStatement cs, int columnIndex) throws SQLException { 
    System.out.println("getResult - columnIndex: " + columnIndex); 
    return cs.getString(columnIndex); 
  } 
} 

在設置裝備擺設文件的typeHandlers中添加typeHandler標簽。

<typeHandlers> 
  <typeHandler javaType="String" jdbcType="VARCHAR" handler="liming.student.manager.type.LimingStringTypeHandler"/> 
</typeHandlers> 

2.5 ObjectFactory對象工場
 
每次MyBatis 為成果對象創立一個新實例,都邑用到ObjectFactory。默許的ObjectFactory 與應用目的類的結構函數創立一個實例毫無差別,假如有曾經映照的參數,那也能夠應用帶參數的結構函數。
假如你重寫ObjectFactory 的默許操作,你可以經由過程繼續org.apache.ibatis.reflection.factory.DefaultObjectFactory創立一下你本身的。
ObjectFactory接口很簡略。它包括兩個創立用的辦法,一個是處置默許結構辦法的,別的一個是處置帶參數結構辦法的。終究,setProperties辦法可以被用來設置裝備擺設ObjectFactory。在初始化你的ObjectFactory實例後,objectFactory元素體中界說的屬性會被傳遞給setProperties辦法。

public class LimingObjectFactory extends DefaultObjectFactory { 
 
  private static final long serialVersionUID = -399284318168302833L; 
 
  @Override 
  public Object create(Class type) { 
    return super.create(type); 
  } 
 
  @Override 
  public Object create(Class type, List<Class> constructorArgTypes, List<Object> constructorArgs) { 
    System.out.println("create - type: " + type.toString()); 
    return super.create(type, constructorArgTypes, constructorArgs); 
  } 
 
  @Override 
  public void setProperties(Properties properties) { 
    System.out.println("setProperties - properties: " + properties.toString() + ", someProperty: " + properties.getProperty("someProperty")); 
    super.setProperties(properties); 
  } 
 
} 

設置裝備擺設文件中添加objectFactory標簽

<objectFactory type="liming.student.manager.configuration.LimingObjectFactory"> 
  <property name="someProperty" value="100"/> 
</objectFactory> 

2.6 plugins插件

MyBatis許可你在某一點攔阻已映照語句履行的挪用。默許情形下,MyBatis許可應用插件來攔阻辦法挪用:

  • Executor(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler(getParameterObject, setParameters)
  • ResultSetHandler(handleResultSets, handleOutputParameters)
  • StatementHandler(prepare, parameterize, batch, update, query)

這些類中辦法的概況可以經由過程檢查每一個辦法的簽名來發明,並且它們的源代碼在MyBatis的刊行包中有。你應當懂得你籠罩辦法的行動,假定你所做的要比監督挪用要多。假如你測驗考試修正或籠罩一個給定的辦法,你能夠會打破MyBatis的焦點。這是低條理的類和辦法,要謹嚴應用插件。
應用插件是它們供給的異常簡略的力氣。簡略完成攔阻器接口,要肯定你想攔阻的指定簽名。

2.7 environments情況
MyBatis 可以設置裝備擺設多個情況。這可以贊助你SQL 映照對應多種數據庫等。

2.8 mappers映照器
這裡是告知MyBatis 去哪尋覓映照SQL 的語句。可使用類途徑中的資本援用,或許應用字符,輸出確實的URL 援用。
例如:

<mappers> 
  <mapper resource="com/manager/data/maps/UserMapper.xml" /> 
  <mapper resource="com/manager/data/maps/StudentMapper.xml" /> 
  <mapper resource="com/manager/data/maps/ClassMapper.xml" /> 
</mappers> 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved