三 、mybatis解決的問題
第一:對應頻繁使用數據庫鏈接,咱們能夠經過C3P0,BoneCP(推薦使用)等等鏈接池來解決
第二:將sql語句配置在xml配置文件中,即便sql變化,不須要對java代碼進行從新編譯。
第三:將sql語句及佔位符號和參數所有配置在xml中。
第四:將查詢的結果集,自動映射成java對象。java
4、開發mysql
一、 配置文件:log4j.properties、sqlMapConfig.xml、以及Bean對象須要映射的xml文件spring
log4j.propertiessql
log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
sqlMapConfig.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> <!-- 和spring整合後 environments配置將廢除 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc管理事務mybatis --> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <!-- 加載映射文件 --> <mappers> <mapper resource="sqlmap/User.xml" /> </mappers> </configuration>
這裏面個人Bean爲User因此名字就叫user.xmlapache
<?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"> <!-- 1.User.xml(原始ibatis命名),mapper代理開發的映射文件命名XxxMapper.xml 2.namespace命名空間,做用就是對sql進行分類化管理,理解sql隔離 3.注意:使用mapper代理開發,namespace有特殊的做用 --> <mapper namespace="test"> <!--在映射文件中配置不少sql語句--> <!--需求:經過id查詢用戶表的記錄--> <!-- 1.標識映射文件中的sql,將sql語句封裝到mapped statement對象中,因此稱爲statement的id 2.parameterType:指定輸入參數類型 3.#{}:表示一個佔位符 4.#{id}:其中的id表示接收的輸入參數,參數名稱就是id,若是輸入參數是簡單類型,#{}中的參數名能夠任意,能夠爲value或者其餘 5.resultType:指定sql輸出結果的所映射的java對象類型,select指定resultType表示將單條記錄映射成的java對象 --> <select id="findUserById" parameterType="java.lang.Integer" resultType="cn.mybaitis.pojo.User"> SELECT * FROM USER WHERE id=#{id} </select> <!-- 1.需求根據用戶名稱模糊查詢 2.思路:模糊查詢返回結果多是多條紀錄 3.resultType:指定就是單條記錄所映射成java對象類型 4.${}:表示拼接sql串,將接收到參數的內容不加任何修飾拼接在sql中 5.使用${}容易引發sql注入 6.${value}:接受輸入參數的內容,若是傳入類型是簡單類型,${}中只能用value --> <select id="findUserByName" parameterType="java.lang.String" resultType="cn.mybaitis.pojo.User"> SELECT * FROM USER WHERE USERNAME LIKE '%${value}%' </select> <!-- 1.需求:添加用戶 2.思路:建立對象,輸入參數是java對象類型 3.#{}:指定pojo的屬性名,接收到pojo對象的屬性值,mybatis經過OGNL獲取對象的屬性值 4.parameterType:指定輸入參數類型是pojo(包括用戶信息) --> <insert id="insertUser" parameterType="cn.mybaitis.pojo.User"> <!-- 將插入數據的主鍵返回,返回到user對象中 SELECT LAST_INSERT_ID():獲得剛insert進去記錄的主鍵值,只適用與自增主鍵 keyProperty:將查詢到主鍵值設置到parameterType指定的對象的哪一個屬性 order:SELECT LAST_INSERT_ID()執行順序,相對於insert語句來講它的執行順序 resultType:指定SELECT LAST_INSERT_ID()的結果類型 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO USER (USERNAME,BIRTHDAY,SEX,ADDRESS) VALUE (#{username},#{birthday},#{sex},#{address}) <!-- 使用mysql的uuid()生成主鍵 執行過程: 首先經過uuid()獲得主鍵,將主鍵設置到user對象的id屬性中 其次在insert執行時,從user對象中取出id屬性值 --> <!-- <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> SELECT uuid() </selectKey> insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address}) --> </insert> <!-- 1.需求:根據Id刪除用戶 2.思路:傳入id --> <delete parameterType="java.lang.Integer" id="deleteUserById"> DELETE FROM USER WHERE id =#{id} </delete> <!-- 1.需求更新用戶 2.根據傳入的id修改用戶 --> <update parameterType="cn.mybaitis.pojo.User" id="updateUser"> UPDATE USER SET username=#{username},sex=#{sex},address=#{address},birthday=#{birthday} WHERE id=#{id} </update> </mapper>
以上爲對用戶的增刪該查(包括模糊查詢)的一個xml。session
User.javamybatis
package cn.mybaitis.pojo; import java.io.Serializable; import java.util.Date; public class User implements Serializable { private static final long serialVersionUID = 1L; //屬性名和數據字段對應 private int id;//主鍵 private String username;//姓名 private String sex;//性別 private Date birthday;//生日 private String address;//住址 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address + "]"; } }
查詢案例代碼app
package cn.mybaitis.first; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import cn.mybaitis.pojo.User; public class MyBatis_select { /** * * @Title: main * @Description: TODO (根據id查詢用戶) * @Author: Hanson * @Create Date: 2015年11月7日 下午9:17:56 * @History: 2015年11月7日 下午9:17:56 Hanson Created. * * @param args * @throws IOException * */ public static void main(String[] args) throws IOException { // mybatis的配置文件 String resource = "SqlMapConfig.xml"; InputStream in = Resources.getResourceAsStream(resource); // 建立會話工廠 SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder().build(in); // 獲得SqlSession SqlSession sqlSession = sqlFactory.openSession(); /* * 查詢一條紀錄 * 經過SQLsession操做數據 * 第一個參數爲Student.xml定義的statement的id * 第二個參數:輸入參數 */ User user = sqlSession.selectOne("test.findUserById", 1); System.out.println(user); //釋放資源 sqlSession.close(); } //模糊查詢 @Test public void testFindByUsername() throws Exception { // 建立會話工廠 SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml")); // 獲得SqlSession SqlSession sqlSession = sqlFactory.openSession(); //list中的user和映射文件中的resultType所指定的類型一致 List<User> list =sqlSession.selectList("test.findUserByName", "小明"); for(User user: list){ System.out.println(user); } sqlSession.close(); } }
插入代碼ide
package cn.mybaitis.first; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import cn.mybaitis.pojo.User; public class MyBatis_insert { /** * 插入用戶 * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // mabatis配置文件 String resource = "SqlMapConfig.xml"; // 對mybatis流化 InputStream in = Resources.getResourceAsStream(resource); // 建立SqlSessionFacrtory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(in); // 打開SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); /** * 業務處理 1,先定義對象 2,執行操做 3,提交事物4,歸還資源 */ User user = new User(); user.setUsername("訂飯"); user.setSex("2"); sqlSession.insert("test.insertUser", user); sqlSession.commit(); System.out.println(user.getId()); sqlSession.close(); } }
刪除案例代碼
package cn.mybaitis.first; import java.io.IOException; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class Mybatis_delete { /** * 刪除用戶 * * @param args * @throws IOException */ public static void main(String[] args) throws IOException { SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsStream("SqlMapConfig.xml")); SqlSession sqlSession = sqlFactory.openSession(); int i = sqlSession.delete("test.deleteUserById",27); System.out.println(i); sqlSession.commit(); sqlSession.close(); } }
修改案例代碼
package cn.mybaitis.first; import java.io.IOException; import java.util.Date; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import cn.mybaitis.pojo.User; public class Mybatis_update { /** * 更新用戶 * @param args * @throws IOException */ public static void main(String[] args) throws IOException { SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml")); // 獲得SqlSession SqlSession sqlSession = sqlFactory.openSession(); User user = sqlSession.selectOne("test.findUserById", 1); user.setAddress("江蘇"); user.setSex("男"); user.setBirthday(new Date()); user.setUsername("婁勳"); int i =sqlSession.update("test.updateUser", user); System.out.println(i); sqlSession.commit(); sqlSession.close(); } }