この記事では主に Mybatis マッピング ファイルの例の詳細な説明を紹介しますので、必要な方は参考にしてください
1. 入力マッピング
parameterType
入力パラメータの Java タイプを指定します。クラスの別名または完全修飾名。単純型、POJO、HashMapを受け取ることができます。
1. 単純型を渡す
ユーザー ID に基づいてユーザー情報をクエリする:
<select id="findUserById" parameterType="int" resultType="com.itheima.mybatis.po.User"> SELECT * FROM USER WHERE id =#{id} </select>
2. POJO オブジェクトを渡す
ユーザーを追加する:
3 、POJOを渡すオブジェクト
の開発中に、クエリ条件はpojoを介して渡されます。クエリ条件は、ユーザーのクエリ条件だけでなく、他のクエリ条件(クエリ条件としてのユーザーの購入商品情報など)を含む包括的なクエリ条件です。この場合、入力パラメータを渡されたオブジェクトをパッケージ化することができます。ユーザー情報の包括的なクエリには、(ユーザー情報、注文情報、製品情報) などの複雑なクエリ条件が必要です。
3.2 パッケージ化オブジェクトを定義する一般に、User.java クラスはデータテーブルのフィールドと一致している必要があり、mybatis のリバースエンジニアリング中に、PO クラスが生成されないことが最善です。テーブル構造に基づいて、
po クラスのフィールドを拡張すると、この時点で上書きされます。
したがって、po クラスを拡張するには、それを継承する拡張クラスを作成する必要があります。
<insert id="insertUser" parameterType="com.itheima.mybatis.po.User"> <selectKey keyProperty="id" resultType="int" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address}) </insert>
POJOパッケージングクラスを定義します:
public class UserExt extends User{ //这里可以定义user的一些扩展信息 }
3.3 マッパーインターフェイスを作成します//パッケージングクラスを使用して、複雑なユーザー情報の包括的なクエリを実行します
public List8dd99489c829a6f478ea8584273b0342 来引用SQL片段:<!-- 根据用户id来查询用户信息(使用SQL片段) --> <!-- [include标签]:引用已经定义好的SQL片段 [refid]:引用的SQL片段id --> <select id="findUserList" parameterType="userQueryVO" resultType="userExt"> SELECT * FROM USER <where> <include refid="select_user_where"/> </where> </select> <!-- 综合查询用户信息总数,需要传入查询条件复杂,比如(用户信息、订单信息、商品信息) --> <select id="findUsersCount" parameterType="QueryUserVO" resultType="int"> SELECT count(1) FROM USER <where> <include refid="select_user_where"/> </where> </select>
3、foreach
向sql传递数组或List时,mybatis使用foreach解析数组里的参数并拼接到SQL中。
(1)传递pojo对象中的list集合
1.1需求
在用户查询列表和查询总数的statement中增加多个id输入查询。
1.2SQL
SELECT * FROM user WHERE id IN (1,10,16)
1.3定义pojo中的list属性
package com.itheima.mybatis.po; import java.util.List; /** * <p>Title: UserQueryVO</p> * <p>Description: TODO(这里用一句话描述这个类的作用) <p> */ public class UserQueryVO { //用户信息 private UserExt userExt; //商品ID集合 private List<Integer> idList; //商品信息 public List<Integer> getIdList() { return idList; } public void setIdList(List<Integer> idList) { this.idList = idList; } public UserExt getUserExt() { return UserExt; } public void setUserExt(UserExt userExt) { this.UserExt = UserExt; } //订单信息 }
1.4映射文件
<!-- [foreach标签]:表示一个foreach循环 --> <!-- [collection]:集合参数的名称,如果是直接传入集合参数,则该处的参数名称只能填写[list]。 --> <!-- [item]:每次遍历出来的对象 --> <!-- [open]:开始遍历时拼接的串 --> <!-- [close]:结束遍历时拼接的串 --> <!-- [separator]:遍历出的每个对象之间需要拼接的字符 --> <if test="idList != null and idList.size > 0"> <foreach collection="idList" item="id" open="AND id IN (" close=")" separator=","> #{id} </foreach> </if>
1.5Mapper接口
//根据用户ID的集合查询用户列表(学习foreach标签之通过POJO对象传ID集合) public List<UserExt> findUserList(UserQueryVO vo);
1.6测试代码
@Test public void testFindUserList() { // 创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 通过SqlSession,获取mapper接口的动态代理对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 构造QueryUserVO对象 QueryUserVO vo = new QueryUserVO(); // UserExt ext = new UserExt(); // ext.setUsername("小明"); // ext.setSex("1"); // vo.setUserExt(ext); // 创建用户ID集合,然后设置到QueryUserVO对象中 List<Integer> idList = new ArrayList<Integer>(); idList.add(1); idList.add(10); idList.add(16); vo.setIdList(idList); // 调用mapper代理对象的方法 List<UserExt> list = mapper.findUserList(vo); System.out.println(list); // 关闭SqlSession sqlSession.close(); }
(2)直接传递List集合
2.1需求
根据用户ID的集合查询用户列表
2.2SQL
SELECT * FROM user WHERE id IN (1,10,16)
2.3映射文件
<!-- 根据用户ID的集合查询用户列表(学习foreach标签之直接传ID集合) --> <!-- [foreach标签]:表示一个foreach循环 [collection]:集合参数的名称,如果是直接传入集合参数,则该处的参数名称只能填写[list]。 [item]:定义遍历集合之后的参数名称 [open]:开始遍历之前需要拼接的SQL串 [close]:结束遍历之后需要拼接的SQL串 [separator]:遍历出的每个对象之间需要拼接的字符 --> <select id="findUsersByIdList" parameterType="java.util.List" resultType="user"> SELECT * FROM USER <where> <if test="list != null and list.size > 0"> <foreach collection="list" item="id" open="AND id IN (" close=")" separator=","> #{id} </foreach> </if> </where> </select>
2.4Mapper接口
//根据用户ID的集合查询用户列表(学习foreach标签之直接传ID集合) public List<User> findUsersByIdList (List<Integer> idList);
2.5测试代码
@Test public void findUsersByIdListTest() { // 创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 通过SqlSession,获取mapper接口的动态代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 构造List<Integer>集合 List<Integer> idList = new ArrayList<Integer>(); idList.add(1); idList.add(10); idList.add(16); // 调用mapper对象的方法 List<User> list = userMapper.findUsersByIdList (idList); System.out.println(list); // 关闭SqlSession sqlSession.close(); }
以上がMybatisマッピングファイルのサンプルコードの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。