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语句的时候就会自动获取里面的内容进行处理。 |
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的主要内容,如果未能解决你的问题,请参考以下文章