目录
9、通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, 请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法, 参数不同时,方法能重载吗?
10、Mybatis 是如何进行分页的?分页插件的原理是什么?
11、Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
15、Mybatis 动态 sql 有什么用?执行原理?有哪些动态 sql?
- <select id=”selectorder” parametertype=”int” resultetype=”me.gacl.domain.order”>
- select order_id id, order_no orderno ,order_price price form
- orders where order_id=#{id};
- </select>
- <select id="getOrder" parameterType="int"
- resultMap="orderresultmap">
- select * from orders where order_id=#{id}
- </select>
- <resultMap type=”me.gacl.domain.order” id=”orderresultmap”>
- <!–用 id 属性来映射主键字段–>
- <id property=”id” column=”order_id”>
- <!–用 result 属性来映射非主键字段,property 为实体类属性名,column为数据表中的属性–>
- <result property = “orderno” column =”order_no”/>
- <result property=”price” column=”order_price” />
- </reslutMap>
- string wildcardname = “%smi%”;
- list<name> names = mapper.selectlike(wildcardname);
- <select id=”selectlike”>
- select * from foo where bar like #{value}
- </select>
- string wildcardname = “smi”;
- list<name> names = mapper.selectlike(wildcardname);
- <select id=”selectlike”>
- select * from foo where bar like "%"#{value}"%"
- </select>
- <insert id=”insertname”>
- insert into names (name) values (#{value})
- </insert>
- list < string > names = new arraylist();
- names.add(“fred”);
- names.add(“barney”);
- names.add(“betty”);
- names.add(“wilma”);
- // 注意这里 executortype.batch
- sqlsession sqlsession =
- sqlsessionfactory.opensession(executortype.batch);
- try {
- namemapper mapper = sqlsession.getmapper(namemapper.class);
- for (string name: names) {
- mapper.insertname(name);
- }
- sqlsession.commit();
- } catch (Exception e) {
- e.printStackTrace();
- sqlSession.rollback();
- throw e;
- }
- finally {
- sqlsession.close();
- }
- <insert id=”insertname” usegeneratedkeys=”true” keyproperty=”
- id”>
- insert into names (name) values (#{name})
- </insert>
- name name = new name();
- name.setname(“fred”);
- int rows = mapper.insertname(name);
- // 完成后,id 已经被设置到对象中
- system.out.println(“rows inserted = ” + rows);
- system.out.println(“generated key value = ” + name.getid());
public UserselectUser( String name, String area);对应的 xml,#{ 0 } 代表接收的是 dao 层中的第一个参数, #{ 1 } 代表 dao 层中第二参数,更多参数一致往后加即可。
- <select id="selectUser"resultMap="BaseResultMap">
- select * fromuser_user_t whereuser_name = #{0}
- anduser_area=#{1}
- </select>
- public interface usermapper {
- user selectuser(@param(“username”) string
- username,@param(“hashedpassword”) string hashedpassword);
- }
然后 , 就可以在 xml 像下面这样使用 ( 推荐封装为一个 map, 作为单个参数传递给mapper):
- <select id=”selectuser” resulttype=”user”>
- select id, username, hashedpassword
- from some_table
- where username = #{username}
- and hashedpassword = #{hashedpassword}
- </select>
- try {
- //映射文件的命名空间.SQL 片段的 ID,就可以调用对应的映射文件中的
- SQL
- //由于我们的参数超过了两个,而方法中只有一个 Object 参数收集,因此
- 我们使用 Map 集合来装载我们的参数
- Map < String, Object > map = new HashMap();
- map.put("start", start);
- map.put("end", end);
- return sqlSession.selectList("StudentID.pagination", map);
- } catch (Exception e) {
- e.printStackTrace();
- sqlSession.rollback();
- throw e;
- } finally {
- MybatisUtil.closeSqlSession();
- }
要想了解更多: