• mybatis基本内容


    ---恢复内容开始---

    # mybatis入门 - 1.应用程序找mybatis要数据 - 2.mybatis从数据库中找来数据 (2.1通过mybatis-config.xml定位哪个数据库 2.2通过映射文件(Category.xml)执行对应的select语句 2.3把多个Category对象装在一个category集合中) - 3.返回一个Category集合

    具体的步骤:

    • 1.需要的jar包(mybatis-3.4.2.jar和 mysql-connector-java-5.08-bin.jar)
    • 2.创建实体类(Category,用于映射category_表)
    • 3.配置文件mybatis-config.xml文件
    <?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>
    <!--别名,自动扫描com. kk.pojo下的类型,使得在后续的映射配置文件中可以直接使用category,而不需全写-->   
        <typeAliases>
          <package name="com.kk.pojo"/>
        </typeAliases>
        <!--作用主要是提供连接数据库用的驱动,数据库名称,编码方式,账号密码-->
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="admin"/>
                </dataSource>
            </environment>
        </environments>
        <!--映射Category.xml文件-->
        <mappers>
            <mapper resource="com/how2java/pojo/Category.xml"/>
        </mappers>
    </configuration>
    
    • 4.配置文件Category.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     
        <mapper namespace="com.kk.pojo">   <!--表示命名空间,表示哪个包下面的类映射到这个文件-->
            <select id="listCategory" resultType="Category"> <!--后续的sql语句的id,用于标识此sql语句供后续代码调用,resultType="Category"表示返回的数据和Category关联起来-->
                select * from   category_      
            </select>
        </mapper>
    
    • 5.测试类TestMybatis
    public class TestMybatis {
        public static void main(String[] args) throws IOException {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);   //根据配置文件mybatis-config.xml得到sqlSessionFactory
            SqlSession session=sqlSessionFactory.openSession();  //根据sqlSessionFactory得到session
            List<Category> cs=session.selectList("listCategory");  //listCategory这个就是在配置文件Category.xml中那条sql语句设置的id。
            for (Category c : cs) {
                System.out.println(c.getName());
            } 
        }
    }
    

    CRUD(增删改查)

    • 1.配置文件category.xml文件
            <insert id="addCategory" parameterType="Category" > <!--增加一条数据-->
                insert into category_ ( name ) values (#{name})    
            </insert>
             
            <delete id="deleteCategory" parameterType="Category" >   <!--删除一条数据-->
                delete from category_ where id= #{id}   
            </delete>
             <!--这是mybatis 内置别名_int 代表 java中的基本类型int,int 代表 java中的类类型Integer-->
            <select id="getCategory" parameterType="_int" resultType="Category"> <!--得到一条特定的数据-->
                select * from   category_  where id= #{id}    
            </select>
     
            <update id="updateCategory" parameterType="Category" >   <!--更新某条数据-->
                update category_ set name=#{name} where id=#{id}    
            </update>
            <select id="listCategory" resultType="Category">
                select * from   category_      
            </select>   
    
    • 对应的测试代码:
    //增加
    Category c = new Category();
    c.setName("新增加的Category");
    session.insert("addCategory",c);
    
    //删除,删除id为6的数据
    Category c = new Category();
    c.setId(6);
    session.delete("deleteCategory",c);
    
    //获取id=3的记录
    Category c= session.selectOne("getCategory",3);
    
    //修改
    session.update("updateCategory",c);
    
    //查询所有
    List<Category> cs = session.selectList("listCategory");
    

    动态SQL

    if语句

    若mapper中的xml文件中的sql语句不使用if时,需要分开查询,需要写多条语句。
    使用if可以把不同情况的查询语句整合,例如可以把全部查询和模糊查询相结合。

            <select id="listProduct" resultType="Product">
                select * from product_          
            </select>
            <select id="listProductByName" resultType="Product">
                select * from product_  where name like concat('%',#{name},'%')         
            </select>
    

    若使用if可以做到:

    <select id="listProduct" resultType="Product">
    	select * from product_
    	<if test="name!=null">
    		where name like concat('%',#{name},'%')
    	</if>		 	
    </select>
    

    where语句

    where用于多条件查询时,若是使用where在语句中,则可能出现矛盾,如下

    <select id="listProduct" resultType="Product">
    	select * from product_
    	<if test="name!=null">
    		where name like concat('%',#{name},'%')
    	</if>		 	
    	<if test="price!=0">
    		and price > #{price}
    	</if>		 	
    </select>
    

    若,当name无参数时,就会报错,需要修改为下,使用where标签

    <select id="listProduct" resultType="Product">
            select * from product_
            <if test="name!=null">
                where name like concat('%',#{name},'%')
            </if>         
            <if test="price!=0">
                and price > #{price}
            </if>         
        </select>
    

    set标签

    与where标签类似的,在update语句里也会碰到多个字段相关的问题。 在这种情况下,就可以使用set标签:

            <update id="updateProduct" parameterType="Product" >
            update product_ 
            <set>
                <if test="name != null">name=#{name},</if>
                <if test="price != null">price=#{price}</if>              
            </set>
    

    trim标签

    trim 用来定制想要的功能,比如where标签就可以用如下替换

    <trim prefix="WHERE" prefixOverrides="AND |OR ">
      ... 
    </trim>
    

    set标签,可以用如下替换

    <trim prefix="SET" suffixOverrides=",">
      ...
    </trim>
    

    choose标签

    Mybatis里面没有else标签,但是可以使用when otherwise标签来达到这样的效果。

    <select id="listProduct" resultType="Product">
    	  SELECT * FROM product_ 
    	  <where>
    	  	<choose>
    		  <when test="name != null">
    		    and name like concat('%',#{name},'%')
    		  </when>			  
    		  <when test="price !=null and price != 0">
    		    and price > #{price}
    		  </when>			  		
    	  	  <otherwise>
    	  	  	and id >1
    	  	  </otherwise>
    	  	</choose>
    	  </where>
    </select>
    

    bind标签

    bind标签就像是再做一次字符串拼接,方便后续使用

    <select id="listpt" resultType="Product">
        select * from product_ where name like concat('%', #{0} , '%')
    </select>
    
    <select id="listProduct" resultType="Product">
        <bind name="likename" value="'%' + name + '%'" />
            select * from   product_  where name like #{likename}
    </select>
    ```<p>---恢复内容结束---</p>
  • 相关阅读:
    案例详解:MTU不一致导致主机和RAC不断重启
    近千人观看live,晚8点继续安排,2个CPU过高案例+1个文件数据删除案例->Oracle故障分析的方法论+DBA能力提升要领...
    一个模版让报表自动生成,领导:这才是数据分析人该干的事
    如何构造一个 SYN_SENT 状态的连接
    TCP 3次握手原理
    SpringCloud Alibaba微服务番外一
    socket bind 随机端口
    Yii项目Security加密解密类提取
    linux中iptables配置文件及命令详解详解
    linux中iptables配置文件及命令详解详解
  • 原文地址:https://www.cnblogs.com/phtjzzj/p/7130286.html
Copyright © 2020-2023  润新知