Mybatis运作流程(手动方式创建sqlSessionFactory)

来源:互联网 发布:html5 炫酷展示页源码 编辑:程序博客网 时间:2024/06/05 20:23

1. Mybatis核心配置文件  Configuration.xml   (为了创建sqlSessionFactory)

<span style="font-size:18px;"><?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></span>
<span style="font-size:18px;"></span>
<span style="font-size:18px;">    <!--为User类定义别名-->    <typeAliases>         <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/>         <typeAlias alias="Article" type="com.yihaomen.mybatis.model.Article"/>     </typeAliases> <span style="white-space:pre"></span><!--数据库连接参数并开启事物-->  <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://127.0.0.1:3306/mybatis?characterEncoding=utf8" /><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><!--User实体所有可能的sql语句映射文件--><mappers>    <mapper resource="com/yihaomen/mybatis/model/User.xml"/></mappers></configuration></span>
</pre><pre name="code" class="html">


2. User.xml User类对应的sql语句

<span style="font-size:18px;"><?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"><!-- namespace参数指定接口 --><mapper namespace="com.yihaomen.mybatis.inter.IUserOperation"><select id="selectUserByID" parameterType="int" resultType="User">    select * from `user` where id = #{id}</select><!-- 为了返回list 类型而定义的returnMap --><resultMap type="User" id="resultListUser">        <id column="id" property="id" />        <result column="userName" property="userName" />        <result column="userAge" property="userAge" />        <result column="userAddress" property="userAddress" />    </resultMap><!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 --><select id="selectUsers" parameterType="string" resultMap="resultListUser">    select * from user where userName like #{userName}</select><!-- User 联合文章进行查询 方法之一的配置 (多对一的方式)  --><resultMap id="resultUserArticleList" type="Article">    <id property="id" column="aid" />    <result property="title" column="title" />    <result property="content" column="content" />        <association property="user" javaType="User">        <id property="id" column="id" />        <result property="userName" column="userName" />        <result property="userAddress" column="userAddress" />            </association>    </resultMap><!-- User 联合文章进行查询 方法之二的配置 (多对一的方式) --><resultMap id="resultUserArticleList-2" type="Article">    <id property="id" column="aid" />    <result property="title" column="title" />    <result property="content" column="content" />        <association property="user" javaType="User" resultMap="resultListUser" />         </resultMap><select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">   select user.id,user.userName,user.userAddress,article.id aid,article.title,article.content from user,article           where user.id=article.userid and user.id=#{id}</select><!--执行增加操作的SQL语句。id和parameterType         分别与IUserOperation接口中的addUser方法的名字和         参数类型一致。以#{name}的形式引用Student参数         的name属性,MyBatis将使用反射读取Student参数         的此属性。#{name}中name大小写敏感。引用其他         的gender等属性与此一致。seGeneratedKeys设置         为"true"表明要MyBatis获取由数据库自动生成的主         键;keyProperty="id"指定把获取到的主键值注入         到Student的id属性-->     <insert id="addUser" parameterType="User"         useGeneratedKeys="true" keyProperty="id">         insert into user(userName,userAge,userAddress)               values(#{userName},#{userAge},#{userAddress})      </insert>        <update id="updateUser" parameterType="User" >        update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}    </update>        <delete id="deleteUser" parameterType="int">        delete from user where id=#{id}    </delete>    </mapper></span>


3.  sql语句对应的接口  ,由这个接口来控制sql语句的调用,更加面向对象

<span style="font-size:18px;">package com.yihaomen.mybatis.inter;import java.util.List;import com.yihaomen.mybatis.model.*;public interface IUserOperation {    public User selectUserByID(int id);public List<User> selectUsers(String userName);public void addUser(User user);public void updateUser(User user);public void deleteUser(int id);public List<Article> getUserArticles(int id);}</span>

4. 实体类User

<span style="font-size:18px;">public class User {private int id;private String userName;private int userAge;private String userAddress;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public int getUserAge() {return userAge;}public void setUserAge(int userAge) {this.userAge = userAge;}public String getUserAddress() {return userAddress;}public void setUserAddress(String userAddress) {this.userAddress = userAddress;}}</span>


5. 测试代码(连接数据库,实现CRUD)

<span style="font-size:18px;">public class Test {    private static SqlSessionFactory sqlSessionFactory;    private static Reader reader;     static{        try{            reader    = Resources.getResourceAsReader("Configuration.xml");            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);        }catch(Exception e){            e.printStackTrace();        }    }    public static SqlSessionFactory getSession(){        return sqlSessionFactory;    }        public void getUserArticles(int userid){    SqlSession session = sqlSessionFactory.openSession();    try {        IUserOperation userOperation=session.getMapper(IUserOperation.class);               List<Article> articles = userOperation.getUserArticles(userid);        for(Article article:articles){        System.out.println(article.getTitle()+":"+article.getContent()+        ":作者是:"+article.getUser().getUserName()+":地址:"+                     article.getUser().getUserAddress());        }    } finally {        session.close();    }    }        public static void main(String[] args) {    Test testUser=new Test();    testUser.getUserArticles(1);}      }</span>


0 0