mybatis使用 原始dao開發 (本身寫dao實現類)

先配置sqlMapConfig.xml文件java

<?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>  

	<!-- 加載配置文件 -->
	<properties resource="db.properties"></properties>
	
	<!-- 開啓二級緩存 -->
    <settings>
    	<setting value="true" name="cacheEnabled"/>
    </settings>
    <!-- 對事務的管理和鏈接池的配置 -->  
    <!-- 和spring 整合後environments配置將廢除 -->
    <environments default="development">  
        <environment id="development">  
        <!-- 使用jdbc事物管理,事物控制由mybatis管理 -->
            <transactionManager type="JDBC" />  
            <!-- 數據庫鏈接池 -->
            <dataSource type="POOLED">  
                <property name="driver" value="${jdbc.driver}" />  
                <property name="url" value="${jdbc.url}" />  
                <property name="username" value="${jdbc.uername}" />  
                <property name="password" value="${jdbc.password}" />  
            </dataSource>  
        </environment>  
    </environments>  
    
    
    <!-- 在sqlmapconfig.xml中加載映射文件 -->
    <mappers>
    	<mapper resource="sqlMap/User.xml"/>
    	<mapper resource="sqlMap/UserMapper.xml"/>
    	<mapper resource="com/shi/mapper/OrderMapper.xml"/>
    </mappers>
        
</configuration>

user.xml 映射文件spring

<?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命名空間,做用就是對sql進行分類化管理,理解sql隔離
注意:使用mapper代理方法開發,namespace有特殊重要的做用-->
<mapper namespace="test">
	<!-- 在映射文件中配置不少sql語句 -->
	<!-- 需經過id查詢用戶 -->
	<!-- 經過select執行查詢
	id:表示映射文件中的sql
	講sql語句封裝到mapedStatement對象中,因此將id稱爲statement的id  
	parameterType:指定輸入參數的類型,這裏指定int型
	#{} :表示一個佔位符
	#{id} :  其中的id表示接受輸入的參數,參數名稱就是id,若是輸入的參數是簡單類型,
			 #{}中的參數名能夠任意,能夠value或者其餘名稱
	resultType :指定sql輸出的所映射的java對象類型,select指定resultType表示
				將單條記錄映射成的java對象
	-->
	<select id="findUserById" parameterType="int" resultType="com.shi.POJO.User">
		SELECT * FROM USER WHERE id=#{value}
	</select>
	
	<!-- 根據用戶名稱模糊查詢用戶,可能返回多條記錄,
	 resultType :指定的就是單條記錄所映射的java對象類型  
	 %{}表示拼接sql串,將接受的參數類容不加修飾的拼接在sql中
	 問題:使用${}拼接sql,引發sql注入 不安全
	 ${value} :接受參數的類容,若是傳入的參數是簡單類型,${}中只能使用value
	 -->
	<select id="findUserByName" parameterType="java.lang.String" resultType="com.shi.POJO.User">
		SELECT * FROM USER WHERE username LIKE '%${value}%'
	</select>

<!-- 刪除用戶 -->
	<delete id="deleteUser" parameterType="int">
		delete from user where id=#{id}
	</delete>
	
	<!-- 跟新用戶 -->
	<update id="updateUser" parameterType="com.shi.POJO.User"> 
		update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}  where id=#{id}
	</update>
	
</mapper>

第一個dao實現類 的查詢用戶的方法sql

@Test
	public void findByIdTest() throws IOException {
		//獲取mybatis配置文件
		String resource="SqlMapConfig.xml";
		//獲得配置文件流
		InputStream inputStream=Resources.getResourceAsStream(resource);
		//InputStream inputStream=Resources.getUrlAsStream("");
		System.out.println(inputStream);
		//建立會話工廠,傳入mybatis配置文件信息
		SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
		
		//經過工廠獲得sqlSession
		SqlSession sqlSession=sqlSessionFactory.openSession();
		
		//經過sqlSession操做數據庫
		//第一個參數:映射文件中的statement的id。等於=namespace+"."+statement的id
		//第二個參數:指定和映射文件中所匹配的parameterType類型的參數
		//sqlSession.selectOne(statement,type);返回的結果是和映射文件中匹配的resultType類型的對象	
		User user=sqlSession.selectOne("test.findUserById", 1);
		
		//System.out.println("用戶名是  : "+user.getUsername());
		System.out.println(user);
		//釋放資源
		sqlSession.close();
	}

原始dao開發過程當中的問題 輸入圖片說明數據庫

相關文章
相關標籤/搜索