1 基本知識
MyBatis中如果每次配置類名都要寫全稱也太不友好了,我們可以通過在主配置文件中配置別名,就不再需要指定完整的包名了。
別名的基本用法:
<configuration> <typeAliases> <typeAlias type="com.domain.Student" alias="Student"/> </typeAliases> ...... </configuration>
但是如果每一個實體類都這樣配置還是有點麻煩這時我們可以直接指定package的名字, mybatis會自動掃描指定包下面的javabean,並且默認設置一個別名,默認的名字為: javabean 的首字母小寫的非限定類名來作為它的別名(其實別名是不去分大小寫的)。也可在javabean 加上注解@Alias 來自定義別名, 例如: @Alias(student)
<typeAliases> <package name="com.domain"/> </typeAliases>
這樣,在Mapper中我們就不用每次配置都寫類的全名了,但是有一個例外,那就是namespace。
namespace屬性
在MyBatis中,Mapper中的namespace用於綁定Dao接口的,即面向接口編程。
它的好處在於當使用了namespace之后就可以不用寫接口實現類,業務邏輯會直接通過這個綁定尋找到相對應的SQL語句進行對應的數據處理
student = (Student) session.selectOne("com.domain.Student.selectById", new Integer(10));
<mapper namespace="com.domain.Student"> <select id="selectById" parameterType="int" resultType="student"> select * from student where id=#{id} </select> </mapper>
2 Mybitis配置
這里新建一個spring boot程序
2.1 目錄結構
2.2 xml文件配置
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> <typeAliases> <package name="sample.mybatis.domain"/> </typeAliases> <mappers> <mapper resource="mapper/CityMapper.xml"/> <mapper resource="mapper/HotelMapper.xml"/> </mappers> </configuration>
這里要注意別名namespace和mappers的配置。
CityMapper.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="sample.mybatis.mapper.CityMapper"> <select id="selectCityById" resultType="City"> select * from city where id = #{id} </select> </mapper>
HotelMapper.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="sample.mybatis.mapper.HotelMapper"> <select id="selectByCityId" resultType="Hotel"> select * from hotel where city = #{id} </select> </mapper>
2.3 Mapper接口、dao實現
HotelMapper.java:
package sample.mybatis.mapper; import org.apache.ibatis.annotations.Mapper; import sample.mybatis.domain.Hotel; /** * @author Eduardo Macarron */ @Mapper public interface HotelMapper { Hotel selectByCityId(int city_id); }
CityDao.java:
package sample.mybatis.dao; import org.apache.ibatis.session.SqlSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import sample.mybatis.domain.City; /** * @author Eddú Meléndez */ @Component public class CityDao { @Autowired private SqlSession sqlSession; public City selectCityById(long id) { return this.sqlSession.selectOne("selectCityById", id); } }
City.java:
package sample.mybatis.domain; import java.io.Serializable; /** * @author Eddú Meléndez */ public class City implements Serializable { private static final long serialVersionUID = 1L; private Long id; private String name; private String state; private String country; public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getState() { return this.state; } public void setState(String state) { this.state = state; } public String getCountry() { return this.country; } public void setCountry(String country) { this.country = country; } @Override public String toString() { return getId() + "," + getName() + "," + getState() + "," + getCountry(); } }
Hotel.java:
package sample.mybatis.domain; import java.io.Serializable; public class Hotel implements Serializable { private static final long serialVersionUID = 1L; private Long city; private String name; private String address; private String zip; public Long getCity() { return city; } public void setCity(Long city) { this.city = city; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getZip() { return zip; } public void setZip(String zip) { this.zip = zip; } @Override public String toString() { return getCity() + "," + getName() + "," + getAddress() + "," + getZip(); } }
執行結果: