mybatis

Posted wxl123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis相关的知识,希望对你有一定的参考价值。

1.先创建一个目录src/main/resources/mybatis/,再在此目录下创建一个mybatis.cfg.xml配置文件,配置文件的内容如下

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <typeAliases><!--进行类别名的定义处理,此处设置的别名为News-->
 7         <typeAlias type="com.yootk.mybatis.vo.News" alias="News"/>
 8     </typeAliases>
 9     <environments default="mysqlDev">    <!-- 定义数据库连接的相关配置 -->
10         <environment id="mysqlDev"> <!-- 配置MySQL数据库连接 -->
11             <transactionManager type="jdbc"/>   <!-- 事务控制类型 -->
12             <dataSource type="POOLED">  <!-- 使用连接池的模式管理连接 -->
13                 <property name="driver" value="org.gjt.mm.mysql.Driver" />
14                 <property name="url" value="jdbc:mysql://localhost:3306/yootk" />
15                 <property name="username" value="root" />
16                 <property name="password" value="mysqladmin" />
17             </dataSource>
18         </environment>
19     </environments>
20     <mappers>
21         <mapper resource="com/yootk/mybatis/vo/mapper/News.xml"/>
22     </mappers>
23 </configuration>

2.再创建src/main/java/com.yootk.mybatis/vo/mapper/文件夹,再在此目录下创建New.xml配置文件,文件的配置如下

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
3         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
4 <!-- 定义所有的SQL语句的映射, 对于本实体而言相关的所有的SQL代码都在此定义 -->
5 <mapper namespace="com.yootk.mapper.NewsNS"><!--这里的namespace是一个sql配置文件的唯一标识-->
6     <insert id="doCreate" parameterType="com.yootk.mybatis.vo.News"><!--这里的id是一个SQL语句的唯一标识-->
7       insert into news (title,content)values(#title,#content);
8     </insert>
9 </mapper>

3.获取生成主键的方法一:

1   <!-- 1.先修改News.xml配置文件-->
    <!--
keyProperty="nid":描述的是当前程序VO类中对应的属性名称-->
    <!--keyColumn="nid":描述的是数据表中的主键列-->
    <!--useGeneratedKeys="true":进行主键的生成操作-->
2   <insert id="doCreate" parameterType="News" keyProperty="nid" keyColumn="nid" useGeneratedKeys="true"> 3  insert into news (title,content)values(#title,#content); 4 </insert>
    <!--在程序中通过News类对象.getNid()即可获取增长后的id内容了-->

4.获取生成主键的方法二:

1   <!--注:keyProperty="nid":表示VO类中对应的属性名称;keyColumn="nid"表示的是主键列(如果列名称和属性名称可以不写此配置);
    resultType="java.lang.Long":主键查询之后的返回值类型;order="AFTER":表示的是此语句出现的位置,BEFORE是之前,AFTER是之后,在mysql中用之后,
    在oracle中用之前--> 3    <insert id="doCreate" parameterType="News"> 4 insert into news (title,content)values(#title,#content); 5 <selectKey keyColumn="nid" keyProperty="nid" order="AFTER" resultType="java.lang.Long"> 6 SELECT LAST_INSERT_ID() 7 </selectKey> 8 </insert>

5.当通过MyBatis传递一个参数数据的时候,这个参数的名称就可以随便写了,但是如果传递了多个参数(或VO实例,Map实例)就需要编写准确的名称。如下代码:

<delete id="doRemove" parameterType="News">
	delete from news where nid=#chjsdbvds 
</delete>
<!--如果参数名称这样写,在程序中给参数赋值的时候只能赋一个参数,不能赋成VO类对象或Map类对象--> 

6.在SqlSession接口中有insert两个,delete两个,update两个,rollback,commit,还有几个查询方法,其中insert·,delete和update最终执行的都是update的方法,所以在调用的时候调用哪个方法没有实质的影响,这样写的目的只是为了我们更好的理解代码。

7.在News.xml配置文件中写findSplit()方法

<mapper namespace="com.yootk.mapper.NewsNS">
  <select id="findSplit" parameterType="java.util.Map" resultType="News">
     select nid,title,content from news where $column like #keyword limit #start,#lineSize;
  </select>
</mapper>

8.关于在MySql映射文件(News.xml)中 使用"$"和"#"的区别?

$属性执行:select nid,title,content from news where title like ? limit ?,?;如果使用"$属性",那么在生成SQL语句的时候就会自动获取里面的内容进行处理。
#属性执行:select nid,title,content from news where ? like ? limit ?,?;而"#属性"表示内容将以占位符"?"的形式出现在程序代码中。

9.处理VO类属性与数据表字段名称不相同问题,采用<resultMap>标签

<!-- 在mapper标签中的首部加入resultMap标签 -->
<mapper namespace="com.yootk.mapper.NewsNS">
    <resultMap id="NewsMap" type="News">    <!-- id就是以后引用的主要标记 -->
        <id column="c_nid" property="nid"/> <!-- column指定列名称,property指定属性名称 -->
        <id column="c_title" property="title"/> <!-- column指定列名称,property指定属性名称 -->
        <id column="c_content" property="content"/> <!-- column指定列名称,property指定属性名称 -->
    </resultMap>
    <insert id="doCreate" parameterType="News" keyColumn="c_nid" keyProperty="nid" useGeneratedKeys="true">
        INSERT INTO t_news(c_title,c_content) VALUES (#title,#content) ;
    </insert>
    <select id="findById" parameterType="java.lang.Long" resultMap="NewsMap">
        SELECT c_nid ,c_title ,c_content  FROM t_news WHERE c_nid=#wodenid ;
    </select>
</mapper>
强调:在以后的开发中还是尽量将VO类的类名称与数据表名称保持一致,VO类的属性名称与数据表的字段名称保持一致

  

以上是关于mybatis的主要内容,如果未能解决你的问题,请参考以下文章

MybatisMyBatis 注解方式的基本 用法

MybatisMyBatis之缓存

MyBatisMyBatis的增删改查

Mybatismybatis登录实例

MybatisMybatis基础(中)

MybatisMybatis缓存