mybatisのマルチ条件クエリーケース(ダイナミックsql)

3689 ワード

最近システムを作って、mybatisをバックエンドのORMとして選んだので、annotationを注釈するのがいいのか、xml構成を使うのがいいのか迷っています.
そのため、多くの資料を調べた.ほとんどがxmlの配置方式を推薦しているような気がします.そして、私は誠心誠意annotationを使っています.結局、時代に順応したいのですが、結局、死活は見つかりません.
最后に1つの方法を探し当てて、実はこの方法が私のとても古い道を歩くのだと感じて、まだORMの时代を使っていないで、私达は通常自分で非空の判断をしてそしてsql文をつなぎます
コードを見てくださいjava
@SelectProvider(type=ContactSqlProvider.class, method="selectByExample")
    @Results({
        @Result(column="idcontact", property="idcontact", jdbcType=JdbcType.INTEGER, id=true),
        @Result(column="contacttype_idcontacttype", property="contacttypeIdcontacttype", jdbcType=JdbcType.INTEGER),
        @Result(column="username", property="username", jdbcType=JdbcType.VARCHAR),
        @Result(column="password", property="password", jdbcType=JdbcType.VARCHAR),
        @Result(column="userlocale", property="userlocale", jdbcType=JdbcType.VARCHAR),
        @Result(column="usersetting", property="usersetting", jdbcType=JdbcType.VARCHAR),
        @Result(column="retired", property="retired", jdbcType=JdbcType.BIT),
        @Result(column="department_iddepartment", property="departmentIddepartment", jdbcType=JdbcType.INTEGER)
    })
    List selectByExample(ContactExample example);

ContactSqlProvider
public String selectByExample(ContactExample example) {
        BEGIN();
        if (example != null && example.isDistinct()) {
            SELECT_DISTINCT("idcontact");
        } else {
            SELECT("idcontact");
        }
        
        SELECT("contacttype_idcontacttype");
        SELECT("username");
        SELECT("password");
        SELECT("userlocale");
        SELECT("usersetting");
        SELECT("retired");
        SELECT("department_iddepartment");
        FROM("contact");
        applyWhere(example, false);
        
        if (example != null && example.getOrderByClause() != null) {
            ORDER_BY(example.getOrderByClause());
        }
        
        return SQL();
    }

ContactDao
public List searchByExample(Contact contact) {
		System.out.println("searchByExampleContact");
		ContactExample example = new ContactExample();
		ContactExample.Criteria cri = example.createCriteria();
		System.out.println(contact.getUsername() + ":" + contact.getPassword());
		if (!contact.getUsername().equals("") && contact.getUsername() != null)
			cri.andUsernameEqualTo(contact.getUsername());
		if (!contact.getPassword().equals("") && contact.getPassword() != null)
			cri.andPasswordEqualTo(contact.getPassword());

		ContactMapper vcontactMapper = sqlSession
				.getMapper(ContactMapper.class);
		List returnList = vcontactMapper.selectByExample(example);
		return returnList;
	}
, 。

mybatis , sql guide xml

http://mybatis.github.io/mybatis-3/dynamic-sql.html


, 。 , JPA。

。 hibernate , 。 。

, 。