mybatis分析全局配置文件

1、properties

簡介:主要導入外部配置文件(jdbc.properties)

<properties resource="jdbc.properties"/>
<environments default="mysql">
<!-- 環境配置,即連接的數據庫。 -->
<environment id="mysql">
<!-- 指定事務管理類型,type="JDBC"指直接簡單使用
了JDBC的提交和回滾設置 -->
<transactionManager type="JDBC"/>
<!-- dataSource指數據源配置,POOLED是JDBC連接對
象的數據源連接池的實現。 -->
<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>

2、typeAlias別名

例如:com.gec.pojo.User用user來命名,簡寫了名稱

<typeAliases>
<typeAlias type="com.gec.pojo.User" alias="user" />
</typeAliases>

3、類型處理器

簡介:實現類型轉換

例如有些自定義的數據類型,自己創建的user類
pojo數據類型---------->TypeHandler------->#{屬性名}
#{屬性名}--------->TypeHandler-------->pojo數據類型

內置的TypeHandler

自帶的TypeHandler
在這裏插入圖片描述

自定義一個TypeHanlder

創建一個數據表

create TABLE tb_user
(
ID int(11) primary key auto_increment,
NAME varchar(18) default null,
SEX char(2) default null,
AGE int(11) default null,
address varchar(20) default null
);

編寫兩個pojo

package com.gec.pojo;
import java.io.Serializable;
public class Address implements Serializable {
private String province;
private String city;
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
package com.gec.pojo;
import java.io.Serializable;
public class User implements Serializable {
private Integer id;
private String name;
private String sex;
private Integer age;
private Address address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", address=" + address +
'}';
}
}

編寫mapper文件

<?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.gec.mapper.UserMapper">
<!--編寫定製sql
id:定製sql方法的id名
parameterType:輸入類型
private String name;
private String sex;
private Integer age;
-->
<insert id="insert" parameterType="user">
<!--preparedStatement實現
insert into tb_user(NAME,SEX,AGE,address)
values (?,?,?,?)
preparedStatement.setString(columnIndex,strAddress);
-->
insert into tb_user(NAME,SEX,AGE,address)
values (#{name},#{sex},#{age},#{address})
</insert>
<!--根據id,獲取用戶信息
resultType屬性:返回的數據類型
-->
<select id="findUserById" parameterType="int"
resultType="user">
select * from tb_user where id=#{id}
</select>
</mapper>

自定義一個typeHandler

package com.gec.typehandler;
import com.gec.pojo.Address;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class AddressTypeHandler extends
BaseTypeHandler<Address> {
//實現賦值處理
//將Address屬性對象------》#{address}
@Override
public void setNonNullParameter(PreparedStatement
preparedStatement, int columnIndex, Address address,
JdbcType jdbcType) throws SQLException {
//廣東省,廣州市
String
strAddress=address.getProvince()+","+address.getCity()
;
preparedStatement.setString(columnIndex,strAddress);
}
/*
* 指明字段名,來獲取數據值
* */
@Override
public Address getNullableResult(ResultSet
resultSet, String cloumnName) throws SQLException {
//廣東省,廣州市
String
strAddress=resultSet.getString(cloumnName);
String province=strAddress.split(",")[0];
String city=strAddress.split(",")[1];
Address address=new Address();
address.setProvince(province);
address.setCity(city);
return address;
}
/*
* 指明字段對應的索引值,來獲取數據值
* */
@Override
public Address getNullableResult(ResultSet
resultSet, int cloumnIndex) throws SQLException {
//廣東省,廣州市
String
strAddress=resultSet.getString(cloumnIndex);
String province=strAddress.split(",")[0];
String city=strAddress.split(",")[1];
Address address=new Address();
address.setProvince(province);
address.setCity(city);
return address;
}
/*
* 針對存儲過程,來獲取數據值
* */
@Override
public Address getNullableResult(CallableStatement
callableStatement, int cloumnIndex) throws
SQLException {
//廣東省,廣州市
String
strAddress=callableStatement.getString(cloumnIndex);
String province=strAddress.split(",")[0];
String city=strAddress.split(",")[1];
Address address=new Address();
address.setProvince(province);
address.setCity(city);
return address;
}
}

註冊typeHandler(在mybatis-config.xml)

<typeHandlers>
<typeHandler
handler="com.gec.typehandler.AddressTypeHandler" />
</typeHandlers>

測試操作,添加數據

public static void insert()
{
SqlSession sqlSession=
MyBatisSessionUtils.openSession();
User user=new User();
user.setName("小蒼老師");
user.setAge(30);
user.setSex("女");
Address address=new Address();
address.setProvince("廣東省");
address.setCity("廣州市");
user.setAddress(address);
//參數一:定製sql方法的id
//參數二:輸入的pojo對象
sqlSession.insert("com.gec.mapper.UserMapper.insert",
user);
//提交事務
sqlSession.commit();
sqlSession.close();
}

根據id獲取,觀察address的數據值

public static void findUserById()
{
SqlSession
sqlSession=MyBatisSessionUtils.openSession();
int id=1;
User
user=sqlSession.selectOne("com.gec.mapper.UserMappe
r.findUserById",id);
System.out.println(user+"
"+user.getAddress().getProvince()+"
"+user.getAddress().getCity());
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章