1.注意src和config是同级,config文件夹可以选中右键build path。

2.具体配置文件

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

log4j.properties

# Global logging configuration
#\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u65e5\u5fd7\u7ea7\u522b\u8981\u8bbe\u7f6e\u6210DEBUG\uff0c\u751f\u4ea7\u73af\u5883\u8bbe\u7f6e\u6210info\u6216error
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

sqlMapConfig.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">
<configuration><!-- 加载属性文件 --><properties resource="db.properties"><!--properties中还可以配置一些属性名和属性值  --><!-- <property name="jdbc.driver" value=""/> --></properties><!-- 全局配置参数,需要时再设置 --><!-- <settings></settings> --><!-- 别名定义 --><typeAliases><!-- 针对单个别名定义type:类型的路径alias:别名--><!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> --><!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)--><package name="com.xdw.mybatis.pojo"/></typeAliases><!-- 和spring整合后 environments配置将废除--><environments default="development"><environment id="development"><!-- 使用jdbc事务管理,事务控制由mybatis--><transactionManager type="JDBC" /><!-- 数据库连接池,由mybatis管理--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments><!-- 加载 映射文件 --><mappers><mapper resource="sqlmap/User.xml"/><!--通过resource方法一次加载一个映射文件 --><!-- <mapper resource="mapper/UserMapper.xml"/> --><!-- 通过mapper接口加载单个 映射文件遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中上边规范的前提是:使用的是mapper代理方法--><!-- <mapper class="cn.xdw.mybatis.mapper.UserMapper"/> --><!-- 批量加载mapper指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中上边规范的前提是:使用的是mapper代理方法--><package name="com.xdw.mybatis.mapper"/></mappers></configuration>

User.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"><!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离
注意:使用mapper代理方法开发,namespace有特殊重要的作用
-->
<mapper namespace="test"><!-- 在 映射文件中配置很多sql语句 --><!-- 需求:通过id查询用户表的记录 --><!-- 通过 select执行数据库查询id:标识 映射文件中的 sql将sql语句封装到mappedStatement对象中,所以将id称为statement的idparameterType:指定输入 参数的类型,这里指定int型 #{}表示一个占位符号#{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。--><select id="findUserById" parameterType="int" resultType="com.xdw.mybatis.pojo.User">SELECT * FROM USER WHERE id=#{id}</select><!-- 根据用户名称模糊查询用户信息,可能返回多条resultType:指定就是单条记录所映射的java对象 类型${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。使用${}拼接sql,引起 sql注入${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value--><select id="findUserByName" parameterType="String" resultType="com.xdw.mybatis.pojo.User">SELECT * FROM USER WHERE username LIKE '%${value}%'</select><!-- 添加用户 parameterType:指定输入 参数类型是pojo(包括 用户信息)#{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值--><insert id="insertUser" parameterType="com.xdw.mybatis.pojo.User"><!-- 将插入数据的主键返回,返回到user对象中SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序resultType:指定SELECT LAST_INSERT_ID()的结果类型--><selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">SELECT LAST_INSERT_ID()</selectKey>insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})<!-- 使用mysql的uuid()生成主键执行过程:首先通过uuid()得到主键,将主键设置到user对象的id属性中其次在insert执行时,从user对象中取出id属性值--><!--  <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">SELECT uuid()</selectKey>insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address}) --></insert><!-- 删除 用户根据id删除用户,需要输入 id值--><delete id="deleteUser" parameterType="java.lang.Integer">delete from user where id=#{id}</delete><!-- 根据id更新用户分析:需要传入用户的id需要传入用户的更新信息parameterType指定user对象,包括 id和更新信息,注意:id必须存在#{id}:从输入 user对象中获取id属性值--><update id="updateUser" parameterType="com.xdw.mybatis.pojo.User">update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}</update></mapper>

Test类:

// 根据id查询用户信息,得到一条记录结果@Testpublic void findUserByIdTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 通过SqlSession操作数据库// 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数// sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象// selectOne查询出一条记录User user = sqlSession.selectOne("test.findUserById", 1);System.out.println(user);// 释放资源sqlSession.close();}// 根据用户名称模糊查询用户列表@Testpublic void findUserByNameTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// list中的user和映射文件中resultType所指定的类型一致List<User> list = sqlSession.selectOne("test.findUserByName", "小明");System.out.println(list);sqlSession.close();}// 添加用户信息@Testpublic void insertUserTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 插入用户对象User user = new User();user.setUsername("王小军");user.setBirthday(new Date());user.setSex("1");user.setAddress("河南郑州");sqlSession.insert("test.insertUser", user);// 提交事务sqlSession.commit();// 获取用户信息主键System.out.println(user.getId());// 关闭会话sqlSession.close();}// 根据id删除 用户信息@Testpublic void deleteUserTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 传入id删除 用户sqlSession.delete("test.deleteUser", 39);// 提交事务sqlSession.commit();// 关闭会话sqlSession.close();}// 更新用户信息@Testpublic void updateUserTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 更新用户信息User user = new User();//必须设置iduser.setId(41);user.setUsername("王大军");user.setBirthday(new Date());user.setSex("2");user.setAddress("河南郑州");sqlSession.update("test.updateUser", user);// 提交事务sqlSession.commit();// 关闭会话sqlSession.close();}

mybatis-基本架构相关推荐

  1. MyBatis的架构设计以及实例分析--转

    原文地址:http://blog.csdn.net/luanlouis/article/details/40422941 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单 ...

  2. 【传智播客郑州校区分享】MyBatis的架构设计分析

    [传智播客郑州校区分享]MyBatis的架构设计分析 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBat ...

  3. 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

    MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例, ...

  4. MyBatis源码分析(一)MyBatis整体架构分析

    文章目录 系列文章索引 一.为什么要用MyBatis 1.原始JDBC的痛点 2.Hibernate 和 JPA 3.MyBatis的特点 4.MyBatis整体架构 5.MyBatis主要组件及其相 ...

  5. 精雕细琢!阿里大师53天悉心打磨出来的MyBatis+设计模式架构指南

    全文内容目录一览 Java设计模式实践指南(字节跳动版) MyBatis入门到进阶(含面试题解) MyBatis底层源码分析(MyBatis架构体系详解) 正文 设计模式是面试中的高频问题,特别是像 ...

  6. MyBatis的架构和其运行流程

    0x00:MyBatis 架构组成 MyBatis 整体的架构组成为:数据源配置文件.SQL 映射配置文件.会话工厂.会话.执行器以及底层封装对象组成. 0x01:数据源配置文件 对于持久层框架,连接 ...

  7. 精雕细琢!阿里耗时”3月“打磨出来的 MyBatis+设计模式 架构指南

    设计模式是面试中的高频问题,特别是像 BAT.TMD 这样的大公司,更加重视候选人的基本功,毕竟,你写出的代码足够"好",是可以让公司后续的运营和维护,变得更简单.更便捷.所以,不 ...

  8. 精雕细琢!阿里打磨出来的 MyBatis+设计模式 架构指南

    面试人群众多,技术市场却相对冷淡,面试的同学们不得不面临着 1 个职位 N 个应聘者的巨大竞争. 问:在这种现状下,如何才能收获又多又好的 Offer? 答:短期准备--刷面试题:长期筹谋--巩固核心 ...

  9. 精雕细琢,阿里打磨出来的 MyBatis+设计模式 架构指南

    蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力.培训.出国.大公司的经历,还有很多很好的朋友.但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,可惜 ...

  10. 12.mybatis核心架构原理

    课程标题<2022超详细mybatis框架源码解读> 课程内容: 1.mybatis环境搭建 2.mybatis使用哪些设计模式 3.mybatis大致运行原理 4.mybatis建造者模 ...

最新文章

  1. python中mod运算符_Python中的数学运算操作符使用进阶
  2. 独家 | 用spaCy蒸馏BERT模型
  3. ITK:从给定的seeds创建距离图
  4. Meta:绝对没有威胁要离开欧洲市场
  5. [C11] 推荐系统(Recommender Systems)
  6. mapxtreme is still in evalutation!
  7. 【渝粤题库】陕西师范大学800002 地球概论
  8. 钩子(HOOK)函数教程
  9. opencv绘制图形轮廓并筛选面积操作
  10. 原创【歌词类】绘流年
  11. 2019信用卡权益总结之十三:延误险
  12. 05.前端面经汇总javaScript篇
  13. 人工智能导论测试题——第六章 进化智能与群体智能(2)
  14. 每天一条Linux命令(12) hostnam (超详细)
  15. 联发科MT6797/Helio X20软件用户手册资料介绍
  16. 01 Python学习--第一周--开课介绍、数据类型、数据运算、表达式、循环、三元运算、对象基本概念...
  17. 需求跟踪系列 III - 建立需求关联最佳的方式和时间点
  18. IDEA使用教程一:下载安装IDEA以及idea的常用设置
  19. JavaScript百炼成仙 函数七重关之三(参数传递)
  20. 如何将caj转换成word

热门文章

  1. c语言库用不用下载杀毒软件,开源杀毒软件ClamAV需要你的支持和帮助
  2. 1158: 零基础学C/C++158——删除中间的*
  3. springboot 定时器使用方法之并行
  4. 《编程人生》15位业界传奇人物 (zz.IS2120)
  5. CAD打开慢,卡在99%
  6. 第二届(2017)中国IT武林大会暨2017年度中国IT年度人物颁奖盛典
  7. VMware Workstation for Windows 历史版本
  8. 【持续更新】【产品相关名词解释】CBD、BOM、DFM、EVT、EOF、CMF、PP、MP等
  9. 京东QQ都没有的牛轰特效、两个ListView联动效果,不用stickyheaderlistview,
  10. iOS Programming - Disallow Alphabetic Characters