MyBatis框架的使用

来源:互联网 发布:用启动盘安装mac 编辑:程序博客网 时间:2024/05/18 03:56

使用步骤

1.导入jar包 

除了mybatis的jar包外,还需要动态代理用到的jar包,数据库要用到的jar包

2.建立源代码文件夹,并在其下建立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"><!--配置项主要有三项:别名,应用环境,mapper文件位置--><configuration><!--对完全限定名较长的类,可在这里对其起别名(一般取类名),供mapper文件使用--><typeAliases><typeAlias type="com.success.entity.User" alias="User"/><typeAlias type="com.success.entity.News" alias="News"/></typeAliases><!--对应用环境的配置,因为同一个项目可能需要在不同的环境下运行--><environments default="dev"><!--对开发环境使用的事务管理器和数据源进行配置--><environment id="dev"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="oracle.jdbc.driver.OracleDriver"/><property name="url" value="jdbc:oracle:thin:@198.9.1.158:1521:cnrjmam"/><property name="username" value="mam42"/><property name="password" value="password"/></dataSource></environment><!--对测试环境使用的事务管理器和数据源进行配置--><environment id="test"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql:///mydb"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!--明确所有mapper文件的位置--><mappers><mapper resource="com/success/mapper/usermapper.xml"/><mapper resource="com/success/mapper/newsmapper.xml"/></mappers></configuration>


3.根据数据库设计在src中建立mapper包(或dao包),编写mapper文件

示例①usermapper.xml

<!--mapper包相当于DAO包,通过对它的调用来实现对数据的增删改查--><?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文件的命名空间只要保证唯一性可以随意起,但如果还要写它对应的接口时,则需要规范命名--><mapper namespace="com.success.mapper.UserMapper"><!--对于select以外的三种操作,很简单:只需要采用相应的结点,写sql语句,配置id和字段类型字段类型有两类:①int,String,long型:适用于sql语句中只需要一个变量的情况②对象:适用于sql语句中需要多个变量的情况(sql语句引用时,只需要写其属性名)--><insert id="save" parameterType="User">INSERT INTO t_user(username,PASSWORD) VALUES(#{username},#{password})</insert><delete id="del" parameterType="long">delete from t_user where id = #{id}</delete><update id="edit" parameterType="User">update t_user set username = #{username},password = #{password} where id = #{id}</update><!-- 对于查询语句,分两类情况①要查询的对象其属性中【不包含】其他对象或其他对象的集合:只使用select一个结点即可要查询的是对象时:resultType为对象的别名要查询的是对象集合时: resultType为对象的list --><select id="findById" parameterType="long" resultType="User">SELECT id,username,password FROM t_user WHERE id = #{id}</select><!-- ②要查询的对象其属性中【包含】其他对象或其他对象的集合:需要使用resultMap结点与select结点配合使用,要注意保证resultMap结点的id属性值与select的resultMap属性值相同resultMap有id,type两个属性,结点下有四类子节点:id与result(都有column与property两个属性,前者表示sql语句查询出的结果集中的列名,后者表示对象的属性名,两者要相对应),collection(有property与ofType属性)与association(有property,column,javaType属性,column表示表格中引用其他表的列名)包含其他对象的集合时: --><select id="findByIdwithNews" parameterType="long" resultMap="findUser">SELECT t_user.id,username,PASSWORD,t_news.id AS newsid,title,user_idFROM t_user LEFT JOIN t_newsON t_user.id = t_news.user_idWHERE t_user.id = #{id}</select><resultMap type="User" id="findUser"><id column="id" property="id"/><result column="username" property="username"/><result column="password" property="password"/><collection property="newsList" ofType="News"><id column="newsid" property="id"/><result column="title" property="title"/><result column="user_id" property="user_id"/></collection></resultMap></mapper>


 

示例②newsmapper.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.success.mapper.NewsMapper"><!-- 表示使用缓存 --><cache/>  <select id="findById" resultMap="findByNews" parameterType="long">SELECT t_news.id,title,user_id,t_user.id AS userid,username,PASSWORDFROM t_news LEFT JOIN t_userON t_news.user_id = t_user.idWHERE t_news.id = #{id}</select><select id="findAll" resultType="list"  resultMap="findByNews">SELECT t_news.id,title,user_id,t_user.id AS userid,username,PASSWORDFROM t_news LEFT JOIN t_userON t_news.user_id = t_user.id</select><resultMap type="News" id="findByNews"><id property="id" column="id"/><result property="title" column="title"/><result property="user_id" column="user_id"/><association property="user" column="user_id" javaType="User"><id property="id" column="userid"/><result property="username" column="username"/><result property="password" column="password"/></association></resultMap></mapper>


4.测试类

一种写法:

package com.success.test;import java.io.Reader;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.success.entity.News;public class TestCRUD {public static void main(String[] args) throws Exception {Reader reder = Resources.getResourceAsReader("mybatis-config.xml");SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reder);//true可要可省,若要,则表示每执行一次session的CRUD方法就提交一次;//  若省去,则表示只有在调用session的commit方法后才将上面的操作一起提交。SqlSession session = factory.openSession(true);// 相当于一个crud方法的位置,实际上是mapper配置文件的相应结点,// 根据id为findAll找到的,还有一个备用参数,用于传sql需要的参数List<News> list = session.selectList("com.success.mapper.NewsMapper.findAll");for(News news : list) {System.out.println(news.getId() + "\t" + news.getTitle() + "\t" + news.getUser().getUsername());}//查找单个对象/*News news = (News) session.selectOne("com.mapper.NewsMapper.findById", 1L);System.out.println(news.getTitle());System.out.println(news.getUser().getUsername());*///查找单个对象/*User user = (User) session.selectOne("com.mapper.UserMapper.findByIdwithNews", 1L);System.out.println(user.getUsername());for(News news : user.getNewsList()) {System.out.println(news.getTitle() + "\t" + news.getId());}*///添加和删除方法/*User user = new User();user.setId(25);user.setPassword("Mybatis");user.setUsername("Struts2");int rows = session.update("com.mapper.UserMapper.edit", user);System.out.println(rows);*//*int rows = session.delete("com.mapper.UserMapper.del", 27);System.out.println(rows);*/session.close();}}


 

另一种写法:

public class AnotherTest {public static void main(String[] args) throws Exception {Reader reder = Resources.getResourceAsReader("mybatis-config.xml");SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reder);//true可要可省,若要,则表示每执行一次session的CRUD方法就提交一次;//  若省去,则表示只有在调用session的commit方法后才将上面的操作一起提交。为了和上边对照,这里省去SqlSession session = factory.openSession();User user = new User();user.setPassword("Mybatis");user.setUsername("springmvc");//【这里是重点】——根据mapper文件的命名空间,建立相应的接口,要保证名称(接口名,参数类型,结果类型)一一对应UserMapper mapper = session.getMapper(UserMapper.class);int rows = mapper.save(user);System.out.println(rows);session.commit();User user2 = mapper.findById(8);System.out.println(user2.getUsername());session.close();}}


 

原创粉丝点击