1. 程式人生 > 其它 >mybatis註解簡單開發

mybatis註解簡單開發

技術標籤:思考mybatisjava

通過XML方式的開發,需要mybatis的配置檔案,和對映的Mapper檔案。

使用註解開發就是省略了Mapper檔案。根據註解加反射的原理,也相當於寫了對映Mapper檔案。

所以,註解開發可以省略Mapper檔案。(mybatis的主配置檔案再與spring框架整合後可以省略)。

註解開發:

1,環境搭建。2,單表crud操作(代理dao)。3,多表查詢。4,快取的配置。

環境搭建

根據資料庫表建立相對應的實體類。

public class Account implements Serializable {
    private Integer id;
    private Integer uid;
    private Double money;
    private User user;
}
public class User implements Serializable {
    private Integer id;
    private String name;
    private List<Account> accounts;
}

寫介面方法。

public interface IUserDao {
//    直接寫SQL語句即可
    @Select("select * from users")
    List<User> findAll();
    @Select("select * from users where id = #{id}")
    User findById(Integer id);
    @Insert(value = "insert into users(name) values(#{name}) ")
    boolean addUser(User user);
     @Select("select * from users where name like #{name}")
    List<User> findByName(String name);
}
/**
 * 四大基礎註解。@Select,@Insert,@Update,@Delete
 */
public interface IAccountDao {
    @Select(value = "select * from account")
    List<Account>findAll();
    @Select(value = "select * from account where id = #{id}")
    Account findById(Integer id);
}

寫mybatis的配置檔案。

<?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="mysql.properties"></properties>
    <!--    這個包下的實體類自動起別名,為類名,無視大小寫-->
    <typeAliases>
        <package name="domain"/>
    </typeAliases>
<!--    配置資料來源-->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
<!--            pooled  連線池-->
            <dataSource type="POOLED">
<!--                ${key}引用外部properties中的key-->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
<!--    介面Mapper檔案的路徑,按包指定-->
    <mappers>
<!--        根據maven的習慣,XML配置的檔案響應的路徑也是在此包下,編譯後,此包中存在有介面和Mapper檔案-->
        <package name="dao"/>
    </mappers>

</configuration>

test程式碼:

public class Test {
    @org.junit.Test
    public void test1() throws IOException {
//        1,獲取位元組輸入流
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//        2,根據位元組輸入流建立SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//        3,使用SqlSessionFactory建立一個SqlSession
        SqlSession session = factory.openSession(true);
//        4,使用SqlSession獲取dao的代理物件
        IAccountDao accountDao = session.getMapper(IAccountDao.class);

//        5,執行dao方法
        List<Account> all = accountDao.findAll();
        for (Account account : all) {
            System.out.println(account);
        }
//        6,釋放資源
        session.close();
        in.close();
    }
}

執行結果:

增刪改的單表查詢直接在相應註解中寫SQL語句即可。

最後一點需要注意的就是,resource的Mapper包中,不能有Mapper檔案的存在,儘管mybatis配置檔案中沒有寫也不能有。(不同於spring框架的配置檔案)。

意思就是:註解開發就只能有一個mybatis的主配置檔案,其他的與mybatis有關的XML就不要了。

模糊查詢:

    @org.junit.Test
    public void test(){
        IUserDao userDao = session.getMapper(IUserDao.class);
//        這裡字串傳值,採用的是預處理的方式
        List<User> list = userDao.findByName("%k%");
        for (User user : list) {
            System.out.println(user);
        }
    }

執行結果: