zoukankan      html  css  js  c++  java
  • mybatis中一增删改查

    基本了解:

    <!-- namespace:命名空间,用于隔离sql,类似java的包 -->
    <!-- #{}:点位符,相当于jdbc的? -->
    <!-- ${}:字符串拼接指令,如果入参为普通数据类型时,{}里只能写value -->
    <!-- 动态代理开发规则:
    1. namespace必需是接口的全路径名
    2. 接口的方法名必需与映射文件的sql id一致
    3. 接口的输入参数必需与映射文件的parameterType类型一致
    4. 接口的返回类型必须与映射文件的resultType类型一致
    -->

    输出结果

    <resultMap type="com.itheima.mybatis.pojo.Order" id="order_map">
    		<!-- 用<id>映射主键 -->
    		<id property="id" column="id"/>
    		<!-- 普通字段用<result>映射 -->
    		<result property="userId" column="user_id"/>
    		<!-- 单表查询下,字段与属性一致时可以省略 -->
    		<!-- <result property="number" column="number"/>
    		<result property="createtime" column="createtime"/>
    		<result property="note" column="note"/> -->
    	</resultMap>
    <!-- resultMap的使用 -->
    	<select id="getOrderListResultMap" resultMap="order_map">
    		SELECT
    		  `id`,
    		  `user_id`,
    		  `number`,
    		  `createtime`,
    		  `note`
    		FROM `order`
    	</select>
    

    sql片段

    <!-- 定义sql片段 -->
    	<sql id="user_sql">
    		  `id`,
    		  `username`,
    		  `birthday`,
    		  `sex`,
    		  `address`
    	</sql>
    <!-- parameterType:入参的数据类型
    resultType:返回结果的数据类型
    -->
    <!-- 别名的使用,不区分大小写 -->
    <select id="getUserById" parameterType="int" resultType="uSEr">
    SELECT
    <include refid="user_sql"/>
    FROM `user`
    WHERE id = #{id}
    </select>
    

    LIKE使用

    <!-- resultType:返回为集合时,只需设置为其中一个元素的数据类型就可 -->
    	<select id="getUserByUserName" parameterType="string" resultType="com.itheima.mybatis.pojo.User">
    		SELECT
    		  `id`,
    		  `username`,
    		  `birthday`,
    		  `sex`,
    		  `address`
    		FROM `user`
    		<!-- WHERE username LIKE #{name} -->
    		<!--  -->
    		WHERE username LIKE '%${value}%'
    	</select>
    

    where标签使用

    <!-- resultType:返回为集合时,只需设置为其中一个元素的数据类型就可 -->
    	<select id="getUserByWhere" parameterType="user" resultType="com.itheima.mybatis.pojo.User">
    		SELECT
    		   <include refid="user_sql"/>
    		FROM `user`
    		
    		<!-- WHERE 1 = 1
    		<if test="username != null and username != ''">
    			and username LIKE '%${username}%'
    		</if>
    		<if test="sex != null and sex != ''">
    			and sex = #{sex}
    		</if> -->
    		
    		<!-- <where>会自动添加where关键字,同时处理多余的and  -->
    		<where>
    			<if test="username != null and username != ''">
    				and username LIKE '%${username}%'
    			</if>
    			<if test="sex != null and sex != ''">
    				and sex = #{sex}
    			</if>
    		</where>
    	</select>
    

    for标签使用

    public class QueryVo {
    
    	private User user;
    	
    	private List<Integer> ids;
    
    //..省略get和set方法
    }
    
    <select id="getUserByIds" parameterType="queryvo" resultType="user">
    		SELECT
    		  `id`,
    		  `username`,
    		  `birthday`,
    		  `sex`,
    		  `address`,
    		  `uuid2`
    		FROM `user`
    		<!-- WHERE id IN(1,10,25,30,32) -->
    		<if test="ids != null">
    			<where>
    				<!-- collection:要遍历的集合,在这里就是pojo的id列表
    					 open:循环开始之前输出的内容
    					 close:循环结束之后输出的内容
    					 item:每次循环的变量
    					 separator:分隔符
    				 -->
    				<foreach collection="ids" open="id IN(" close=")" item="u_id" separator=",">
    					#{u_id}
    				</foreach>
    			</where>
    		</if>
    	</select>
    

      

    一对一查询

    public class Order {
    	private Integer id;
    
    	private Integer userId;
    
    	private String number;
    
    	private Date createtime;
    
    	private String note;
    	
    	private User user;
    //..省略get和set
    }
    public class OrderUser extends Order {
    	private String username;
    	private String address;
    //..省略get和set
    }
    //方式一查询
    <select id="getOrderUser" resultType="orderUser">
    		SELECT 
    		  o.`id`,
    		  o.`user_id`,
    		  o.`number`,
    		  o.`createtime`,
    		  o.`note`,
    		  u.`username`,
    		  u.`address` 
    		FROM
    		  `order` o 
    		  LEFT JOIN `user` u 
    		    ON u.`id` = o.`user_id` 
    	</select>
    //方式二查询用association
    <resultMap type="order" id="order_user_map">
    		<!-- 用<id>映射主键 -->
    		<id property="id" column="id"/>
    		<!-- 普通字段用<result>映射 -->
    		<result property="userId" column="user_id"/>
    		<!-- 单表查询下,字段与属性一致时可以省略 -->
    		<result property="number" column="number"/>
    		<result property="createtime" column="createtime"/>
    		<result property="note" column="note"/>
    		
    		<!-- 一对一关联查询用association
    			 property:关联的属性,在这里就是订单的用户属性
    			 javaType:user属性的数据类型,支持别名
    		 -->
    		<association property="user" javaType="com.itheima.mybatis.pojo.User">
    			<!-- 用<id>映射主键 -->
    			<id property="id" column="user_id"/>
    			<!-- 普通字段用<result>映射 -->
    			<result property="username" column="username"/>
    			<result property="address" column="address"/>
    			<result property="birthday" column="birthday"/>
    			<result property="sex" column="sex"/>
    		</association>
    	</resultMap>
    	
    	<select id="getOrderUserResultMap" resultMap="order_user_map">
    		SELECT 
    		  o.`id`,
    		  o.`user_id`,
    		  o.`number`,
    		  o.`createtime`,
    		  o.`note`,
    		  u.`username`,
    		  u.`address`,
    		  u.`birthday`,
    		  u.`sex`
    		FROM
    		  `order` o 
    		  LEFT JOIN `user` u 
    		    ON u.`id` = o.`user_id` 
    	</select>
    

     一对多查询

    public class User {
    
    	private Integer id;
    	private String username;// 用户姓名
    	private String sex;// 性别
    	private Date birthday;// 生日
    	private String address;// 地址
    	
    	private String uuid2;
    	
    	private List<Order> orders;
    //..省略get和set
    }
    //第一种方法
    <!-- resultType:返回为集合时,只需设置为其中一个元素的数据类型就可 -->
    	<select id="getUserByQueryVo" parameterType="queryvo" resultType="com.itheima.mybatis.pojo.User">
    		SELECT
    		  `id`,
    		  `username`,
    		  `birthday`,
    		  `sex`,
    		  `address`
    		FROM `user`
    		<!-- WHERE username LIKE #{name} -->
    		<!--  -->
    		WHERE username LIKE '%${user.username}%'
    	</select>
    //第二种方法是用标签collection
    
    <resultMap type="user" id="user_order_map">
    		<!-- 用<id>映射主键 -->
    		<id property="id" column="id"/>
    		<!-- 普通字段用<result>映射 -->
    		<result property="username" column="username"/>
    		<result property="address" column="address"/>
    		<result property="birthday" column="birthday"/>
    		<result property="sex" column="sex"/>
    		
    		<!-- 一对多关联用<collection>
    			 property:属性名称
    			 ofType:属性的数据类型
    		 -->
    		<collection property="orders" ofType="order">
    			<id property="id" column="o_id"/>
    			<!-- 普通字段用<result>映射 -->
    			<result property="userId" column="id"/>
    			<!-- 单表查询下,字段与属性一致时可以省略 -->
    			<result property="number" column="number"/>
    			<result property="createtime" column="createtime"/>
    			<result property="note" column="note"/>
    		</collection>
    	</resultMap>
    <select id="getUserOrderMap" resultMap="user_order_map">
    		SELECT 
    		  u.`id`,
    		  u.`username`,
    		  u.`birthday`,
    		  u.`sex`,
    		  u.`address`,
    		  u.`uuid2`,
    		  o.`id` o_id,
    		  o.`number`,
    		  o.`createtime`,
    		  o.`note` 
    		FROM
    		  `user` u 
    		  LEFT JOIN `order` o 
    		    ON o.`user_id` = u.`id` 
    	</select>
    

      

    1.增

    <insert id="insertUser" parameterType="User">
    		INSERT INTO USER
    		            (`username`,
    		             `birthday`,
    		             `sex`,
    		             `address`)
    		VALUES (#{username},
    		        #{birthday},
    		        #{sex},
    		        #{address});
    </insert>
    

      

    2.删

    <delete id="deleteUser" parameterType="int">
    		DELETE FROM `user` WHERE `id` = #{id1}
    	</delete>
    

      

    3.改

    <update id="updateUser" parameterType="User">
            UPDATE USER SET username = #{username} WHERE id = #{id}
    </update>
  • 相关阅读:
    PAT (Advanced Level) 1114. Family Property (25)
    PAT (Advanced Level) 1113. Integer Set Partition (25)
    PAT (Advanced Level) 1112. Stucked Keyboard (20)
    PAT (Advanced Level) 1111. Online Map (30)
    PAT (Advanced Level) 1110. Complete Binary Tree (25)
    PAT (Advanced Level) 1109. Group Photo (25)
    PAT (Advanced Level) 1108. Finding Average (20)
    PAT (Advanced Level) 1107. Social Clusters (30)
    PAT (Advanced Level) 1106. Lowest Price in Supply Chain (25)
    PAT (Advanced Level) 1105. Spiral Matrix (25)
  • 原文地址:https://www.cnblogs.com/liushisaonian/p/9557368.html
Copyright © 2011-2022 走看看