1. 程式人生 > >Mybatis配置23事

Mybatis配置23事

配置參考連結:Mybatis參考文獻

1.通過單純的xml對映實現查詢

SqlMapperConfig.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">
<!-- 配置sql核心配置檔案 -->
 <configuration>
    <environments default
="test"> <environment id="test"> <transactionManager type="JDBC"/><!-- 使用jdbc事務 manager容器去管理,mybatis什麼也不做 --> <dataSource type="POOLED"><!-- 資料來源 unpooled 非池化 pooled JNDI方式 命名服務 --> <property name="driver" value="com.mysql.jdbc.Driver"
/> <property name="url" value="jdbc:mysql://localhost:3306/hr?characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment>
</environments> <!-- 宣告呼叫對映檔案 --> <mappers> <!-- 單個xml檔案 --> <mapper resource="com/feifan/UserMapper.xml"/><!-- 檔案路徑 --> </mappers> </configuration>

Mapper.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="com.feifan"><!-- 在測試類中通過買名稱空間+id 訪問Sql語句 -->
	<select id="findlist" resultType="com.feifan.pojo.User">
		select * from emps
	</select>
	
	<insert id="insert" parameterType="com.feifan.pojo.User">
		insert into emps (fname,lname,email,tel)values("kk",null,null,null)
	</insert>
	
</mapper>

測試基礎類BaseTest

/** 測試基礎類*/
public class TestBase {

	//獲取sqlsessionFactory 物件
	protected SqlSessionFactory sqlSessionFactory;//單例執行緒安全
	
	@Before//在測試方法Test之前執行
	public void init() throws Exception{
		String resource="sqlMapConfig.xml";
		InputStream in = Resources.getResourceAsStream(resource);//讀取配置檔案
		sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);//獲取工場物件
		System.out.println("獲取到sqlsessionfactory物件"+sqlSessionFactory);
	}
	//Test之後執行
	@After
	public void close() {
		System.out.println("銷燬單列物件"+sqlSessionFactory);
	}
}

測試類:

public class TestMain extends TestBase {
	
	@Test
	public void findList(){
		SqlSession openSession = sqlSessionFactory.openSession();//獲取sqlsession物件
		String sql="com.feifan.findlist";//mapper.xml下要執行的語句id 名稱空間+id
		List<User> selectList = openSession.selectList(sql);//執行查詢語句
		for (User user : selectList) {
			System.out.println(user);
		}
	}
	//插入資料
	public void insert(){
		SqlSession openSession = sqlSessionFactory.openSession();//獲取sqlsession物件
		String sql="com.feifan.insert";//mapper.xml下要執行的語句id 名稱空間+id
		User user=new User();
		user.setFname("kkk");
		user.setLname("kkkk");
		user.setEmail("kkkk");
		user.setTel("09098");
		int i = openSession.insert(sql, user);//執行查詢語句
		System.out.println(i);
	}
}

2.介面方式配置Mybatis

介面配置xml 實現查詢SqlConfig.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">
    
<!-- 配置sql核心配置檔案 -->
<configuration>
<!--  載入資料庫屬性檔案-->
<properties resource="db.properties"></properties>
<!-- 設定駝峰對映規則 -->
<settings>
	<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 為類起別名 後面可以用別名呼叫 -->
<typeAliases>
    	<typeAlias type="com.feifan.User" alias="User"/>
    	<!-- 多個類別名採用包掃描方式,別名為類名 -->
		<package name=com.feifan/>
</typeAliases>
    <!-- 配置環境 事務 資料來源 對映檔案 -->
    <environments default="test">
    	<environment id="test">
    		<transactionManager type="JDBC"/><!-- 事務 JDBC(資料庫自己處理)/MANAGE(meveanxici自行處理 -->
               <dataSource type="POOLED"><!-- 資料來源 unpooled 非池化 pooled JNDI方式 -->
                    <property name="driver" value="${jdbcDriver}"/>
                    <property name="url" value="${jdbcUrl}"/>
                    <property name="username" value="${jdbcUser}"/>
                    <property name="password" value="${jdbcPassword}"/>
                </dataSource>
    	</environment>
    </environments>
    <!-- 宣告呼叫對映檔案 -->
    <mappers>
    	<!-- <mapper resource="com/feifan/dao/UserMapper.xml"/> xml 配置方式是路徑-->
    	<mapper class="com.feifan.dao.UserMapper"/><!-- 介面文配置是類的全名 -->
    	<!-- 配置包掃描可以掃描多個介面 -->
    	<package name="com.feifan.dao"/>
    </mappers>
</configuration>

Mapper.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="com.feifan.dao.UserMapper"><!-- 介面的全路徑 -->
	<sql id="cols">id,name,birthday,address</sql><!-- sql查詢別名下面直接引用節省程式碼 -->
	
	<select id="find" resultType="com.feifan.User">
		<!-- select <include refid="cols"></include> from user -->
		select *from user
	</select>
	
	<!-- 查詢所有,resultType返回值,標識返回型別List<> -->
	<select id="find1" resultType="User">
		select id,name,birthday,address from user
	</select>
	
	<!-- 只返回一個值,返回一個整數值  -->
	<select id="count" resultType="integer">
		SELECT COUNT(*) FROM user
	</select>
	
	<!-- 獲取一個使用者的資訊(一條記錄)#{id}引數,解析獲取id值 -->
	<select id="get" parameterType="integer" resultType="User">
		SELECT * FROM USER WHERE id = #{id}	
	</select>
	
	<!-- 新增 -->
	<insert id="insert">
		INSERT INTO USER 
		(id,NAME,birthday,address)
		VALUES(6,'tony','2018-06-19','北京')
	</insert>
	
	<!-- 修改 -->
	<update id="update">
		UPDATE User
		SET NAME='tony' WHERE id=6
	</update>
	
	<!-- 刪除 -->
	<delete id="delete" parameterType="integer">
		DELETE FROM User WHERE id=#{pid}
	</delete>
	
	<!-- 排序 -->
	<select id="orderby" parameterType="map"
		 resultType="User">
			SELECT * FROM User ${ob}
	</select>
</mapper>

介面類配置:

public interface UserMapper {
	List<User> find();//查詢資料
	//名字需和mapper.xml檔案中的id一樣
	Integer insert();//增加資料
}

測試基類:

public class TestBase {
	
	protected SqlSessionFactory  SqlSessionFactory;//執行緒安全 單列
	@Before
	public void init() throws Exception{
		String resource="sqlMapConfig.xml";
		InputStream in = Resources.getResourceAsStream(resource);//讀取配置檔案
		SqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//獲取工廠物件
		System.out.println(SqlSessionFactory);
	}
	
	@After
	public void close(){
		System.out.println("測試執行完畢"+SqlSessionFactory);
	}
}

測試類:

public class TestMain extends TestBase {

	//查詢資料
	@Test
	public void test01() throws Exception{
		SqlSession openSession = SqlSessionFactory.openSession();//獲取sqlsession物件
		UserMapper mapper = openSession.getMapper(com.feifan.dao.UserMapper.class);//獲取介面物件
		System.out.println(mapper);
		List<User> findAll = mapper.find();//執行方法。
		for (User user : findAll) {
			System.out.println(user);
		}
	}
	
	//查詢資料
	@Test
	public void test01_1() throws Exception{
		SqlSession openSession = SqlSessionFactory.openSession();//獲取sqlsession物件,非執行緒安全
		List<User> selectList = openSession.selectList("com.feifan.dao.UserMapper.find");
		for (User user : selectList) {
			System.out.println(user);
		}
	}
	//增加資料
	@Test
	public void test02(){
		SqlSession openSession = SqlSessionFactory.openSession();//獲取sqlsession物件,
		int i = openSession.insert("com.feifan.insert");//mapper.xml下要執行的語句id 名稱空間+id
		System.out.println("增加資料"+i);//mybatis事務。預設不是自動提交所以需要手動提交
		openSession.commit();//手動提交事物
		
	}
}

其他動態sql注意事項:
在這裡插入圖片描述
在這裡插入圖片描述在這裡插入圖片描述在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述