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>
原文地址:https://www.cnblogs.com/phtjzzj/p/7130286.html