mybatis使用起来不复杂,大体上来说,就是将db连接信息,所有的sql语句信息,都放到配置文件里面,然后去读配置信息,根据db信息,创建好session工厂,然后拿到sqlsession回话之后,再去读取sql语句信息,然后根据你指定的sql,去执行,传参数,并返回结果。返回的结果可以根据你在sql语句配置文件里的配置,自动转换成对象,方便使用。
 
1,conf.xml 文件
     这里面配置了db的链接信息,属性信息,所有sql语句xml的mapperxml列表信息等。类似下面这种
  

<?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> <properties resource="db.properties"/>
<typeAliases>
<!-- 为实体类me.gacl.domain.User配置一个别名_User -->
<!-- <typeAlias type="me.gacl.domain.User" alias="_User"/> -->
<!-- 为me.gacl.domain包下的所有实体类配置别名,MyBatis默认的设置别名的方式就是去除类所在的包后的简单的类名
比如me.gacl.domain.User这个实体类的别名就会被设置成User
-->
<package name="com.cn.liubb"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}" />
<property name="username" value="${name}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments> <mappers>
<!-- 注册userMapper.xml文件,
userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->
<mapper resource="mapperxml/userMapper.xml"/>
<mapper resource="mapperxml/classMapper.xml"/>
<!-- 注册UserMapper映射接口-->
<mapper class="com.cn.liubb.UserMapperI"/>
</mappers>
<!-- 配置实体类的别名,配置实体类别名的目的是为了在引用实体类时可以使用实体类的别名来代替实体类,达到简写的目的 --> </configuration>
2,mapper xml 文件
     这里面主要配置了要执行的sql语句信息,返回值的对象映射信息,curd语句都可以,是否开启二级缓存配置等等。类似下面这种。
   

<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="me.gacl.mapping.classMapper"就是me.gacl.mapping(包名)+classMapper(classMapper.xml文件去除后缀)
-->
<mapper namespace="com.cn.liubb.classMapper"> <!--
根据classId查询对应的班级信息,包括学生,老师
-->
<!--
方式一: 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集
SELECT * FROM class c, teacher t,student s WHERE c.teacher_id=t.t_id AND c.C_id=s.class_id AND c.c_id=1
-->
<select id="getClass3" parameterType="int" resultMap="ClassResultMap3">
select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.C_id=s.class_id and c.c_id=#{id}
</select>
<resultMap type="com.cn.liubb.Classes" id="ClassResultMap3">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" column="teacher_id" javaType="com.cn.liubb.Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
<!-- ofType指定students集合中的对象类型 -->
<collection property="students" ofType="com.cn.liubb.Student">
<id property="id" column="s_id"/>
<result property="name" column="s_name"/>
<result property="classid" column="c_id"/>
</collection>
</resultMap> <!--
方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型
SELECT * FROM class WHERE c_id=1;
SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的teacher_id的值
SELECT * FROM student WHERE class_id=1 //1是第一个查询得到的c_id字段的值
-->
<select id="getClass4" parameterType="int" resultMap="ClassResultMap4">
select * from class where c_id=#{id}
</select>
<resultMap type="com.cn.liubb.Classes" id="ClassResultMap4">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" column="teacher_id" javaType="com.cn.liubb.Teacher" select="getTeacher2"></association>
<collection property="students" ofType="com.cn.liubb.Student" column="c_id" select="getStudent"></collection>
</resultMap> <select id="getTeacher2" parameterType="int" resultType="com.cn.liubb.Teacher">
SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
</select> <select id="getStudent" parameterType="int" resultType="com.cn.liubb.Student">
SELECT s_id id, s_name name, class_id classid FROM student WHERE class_id=#{id}
</select> <select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE">
CALL PRO4(?,?)
</select> <parameterMap type="java.util.Map" id="getUserCountMap">
<parameter property="ptno" mode="IN" jdbcType="INTEGER"/>
<parameter property="cou" mode="OUT" jdbcType="INTEGER"/>
</parameterMap> </mapper>
3,mybatis的使用
     配置好了上面两种信息之后,就可以使用起来了,
     比如说,获取session
        String resource = "conf.xml";
        InputStream is = TestMybatis.class.getClassLoader().getResourceAsStream(resource);
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession session = sessionFactory.openSession();
     通过session执行sql,指定sql语句id即可。          
        String statement = "com.cn.liubb.userMapper.getUser";
        User user = session1.selectOne(statement, 1);
 
注:有些代码是网络上的,自己拿下来运行了下,后来找不到出处了,望原谅。

最新文章

  1. Keras官方Example里Mnist-cnn的调试运行
  2. hadoop 多表join:Map side join及Reduce side join范例
  3. Spark常用函数(源码阅读六)
  4. javascript_basic_01之概述
  5. 一台机子上运行使用不同Java版本的多个tomcat
  6. Inviting Friends(二分+背包)
  7. MongoDB 字段增长
  8. java连接mysql数据库(jsp显示和控制台显示)
  9. html笔记05:html、css、javascript综合案例
  10. glibc 安装( version `GLIBC_2.14&#39; not found&quot;)
  11. ios第三方工具
  12. MVC4重复提交
  13. TypeError: &#39;QueryDict&#39; object is not callable
  14. OpenGL ES之glUniform函数
  15. 如何禁止App在后台运行以及如何保存和恢复App的状态
  16. 学习笔记TF064:TensorFlow Kubernetes
  17. Manjaro安装配置笔记
  18. SublimeText3安装Highlight插件
  19. Singleton Summary
  20. input事件手机端可能会影响手写

热门文章

  1. 聊聊数据库~6.SQL运维中篇
  2. 阿里云centos7搭建php+nginx环境
  3. 项目中nodejs包高效升级插件npm-check-updates
  4. PAT 天梯赛 L2-017. 人以群分 【排序】
  5. Linux平台下贪吃蛇游戏的运行
  6. Android系统定制之SystemUI修改:下拉通知栏尺寸【转】
  7. Hadoop 运行jar包时 java.lang.ClassNotFoundException: Class com.zhen.mr.RunJob$HotMapper not found
  8. android 真心话大冒险 摇色子
  9. hdu 3308 线段树 区间合并+单点更新+区间查询
  10. 分布式系统的Raft算法——在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新 意味着还是可能丢数据!!!