天天看點

mybatis-使用where動态拼接sql

一、建立項目和資料庫

    項目名稱:mybatis092901

    資料庫名稱:mybatis0929

        表名稱:dept

        CREATE TABLE `dept` (

          `deptNo` int(11) NOT NULL,

          `deptName` varchar(30) DEFAULT NULL,

          `location` varchar(30) DEFAULT NULL,

          PRIMARY KEY (`deptNo`)

        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

        表名稱:emp

        CREATE TABLE `emp` (

          `empno` int(11) NOT NULL,

          `ename` varchar(30) DEFAULT NULL,

          `hiredate` date DEFAULT NULL,

          `job` varchar(30) DEFAULT NULL,

          `sal` double DEFAULT NULL,

          `mgr` varchar(30) DEFAULT NULL,

          `comm` varchar(30) DEFAULT NULL,

          `deptno` int(11) DEFAULT NULL,

          PRIMARY KEY (`empno`)

二、添加jar包

    1.在項目上建立lib目錄

        /lib

    2.在lib目錄下添加jar

        junit-4.10.jar

        mybatis-3.2.2.jar

        mysql-connector-java-5.1.10-bin.jar

三、添加配置檔案

    1.在項目上建立conf目錄

        /conf

    2.在conf目錄下添加配置檔案

        配置檔案名稱: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>

                <typeAlias alias="Emp" type="cn.jbit.mybatis092901.domain.Emp"/>

            </typeAliases>

            <environments default="development">

                <environment id="development">

                <transactionManager type="JDBC"/>

                    <dataSource type="POOLED">

                    <property name="driver" value="com.mysql.jdbc.Driver"/>

                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis0929"/>

                    <property name="username" value="root"/>

                    <property name="password" value="root"/>

                    </dataSource>

                </environment>

            </environments>

        </configuration>

四、建立實體類

    1.在src目錄下建立包

        包名:cn.jbit.mybatis092901.domain

    2.在包下建立實體類

        類名:Dept.java

        内容:

        public class Dept implements Serializable {

            private Integer deptNo;//部門編号

            private String deptName;//部門名稱

            private String location;//部門位址

            //省略get and set 

        }

        類名:Emp.java

        public class Emp implements Serializable {

            //員工姓名

            private String empName;

            //員工編号

            private Integer empNo;

            //員工入職時間

            private Date hireDate;    

            //員工職位

            private String job;

            //員工工資

            private Double salary;

            //經理編号

            private Integer mgr;

            //獎金

            private Double comm;

            //部門編号

            private Integer deptNo;

五、持久層設計

    1.接口設計

        1).在src目錄建立包

            包名:cn.jbit.mybatis092901.dao

        2).在包下建立接口

            接口名:IEmpDao.java

            接口中内容:

            public interface IEmpDao {

                /**

                 * 使用where

                 * @param emp

                 * @return

                 */

                public List<Emp> findEmpByExampleWhere(Emp emp);

            }

六、添加相關映射檔案

    1.在conf下添加配置檔案

        映射檔案名稱:EmpDaoMapper.xml

        映射檔案内容:

        <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 

        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

        <mapper namespace="cn.jbit.mybatis092901.dao.IEmpDao">

            <resultMap id="empResultMap" type="cn.jbit.mybatis092901.domain.Emp">

                <id property="empNo" column="empno" />

                <result property="empName" column="ename" />

                <result property="hireDate" column="hiredate" />

                <result property="job" column="job" />

                <result property="salary" column="sal" />

                <result property="comm" column="comm" />

            </resultMap>

            <!--

                使用where進行動态Sql拼接 

            -->

            <select id="findEmpByExampleWhere" parameterType="Emp" resultMap="empResultMap">

                  SELECT * FROM EMP

                  <where>

                    <if test ="deptNo != null">

                      and deptno= #{deptNo}

                    </if>

                    <if test ="empName != null">

                      and ename like #{empName}

                  </where>

              </select>

        </mapper>

七.持久層實作類設計

        1).在src目錄下建立包

            包名:cn.jbit.mybatis092901.dao.impl

        2).在包下建立實作類

            實作類名:EmpDaoImpl.java

            實作類中的内容:

            /**

             * 為了使用代碼看起來清晰,SqlSession的擷取都使用工具類

             */

            @Override

            public void insertEmp(Emp emp) {

                String resource = "mybatis-config.xml";

                Reader reader = null;

                SqlSessionFactory factory = null;

                SqlSession session = null;

                try {

                    reader = Resources.getResourceAsReader(resource);

                    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

                    factory = builder.build(reader);

                    session = factory.openSession();

                    List<Emp> empList = new ArrayList();

                    empList = session.selectList("cn.jbit.mybatis092901.dao.IEmpDao.findEmpByExampleIf",emp);

                } catch (Exception e1) {

                    e1.printStackTrace();

                }finally {

                    session.close();

                }

八、在配置檔案中添加映射檔案引用

    1.在mybatis-fonfig.xml檔案中添加mapper

        <mappers>

            <mapper resource="EmpDaoMapper.xml"/>

        </mappers>

九、測試操作

    1.在項目中建立test目錄

        /test

    2.在test目錄下建立包

        cn.jbit.mybatis092901.dao

    3.在包下建立測試類

        類名:EmpDaoTest.java

        public class EmpDaoTest {

            //員工類的持久層實作

            private static IEmpDao empDao = new EmpDaoImpl();

             * 測試where

            @Test

            public void testwhere(){

                Emp emp = new Emp();

                emp.setDeptNo(9);

                emp.setEmpName("張平U");

                List<Emp> emps = empDao.findEmpByExampleWhere(emp);

                printEmpList(emps);

            }        

            private void printEmpList(List<Emp> empList){

                for(Emp emp:empList){

                    printEmp(emp);

本文轉自  素顔豬  51CTO部落格,原文連結:http://blog.51cto.com/suyanzhu/1559319