先配置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開發過程當中的問題 數據庫