如果文章有误,请各位楼下评论,感谢各位积极修正! 一起学习,成为大佬!

mybatis:

1.轻量级

2.高级映射(实体类与数据库表字段的映射) 这样就可以后续开发中去操作实体类而不需要去关注数据库,(但其实已经做了一遍实体类与数据库字段的对应关系)

3.mybatis中 dao层为接口.不需要写实现类,实现的方式交付给xml或注解

4.mybatis所需依赖的jar

    <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency> <!-- mysql 连接数据库 java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.15</version>
</dependency>
  1. 注意:映射xml文件的路径需要与接口对应上

第一章 记录xml方式

需要两个xml文件

主配置文件:mybatis-config.xml

映射文件:user.xml

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">

mybatis-config.xml

<configuration>
<!--配置环境-->
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务-->
<transactionManager type="JDBC"></transactionManager>
<!--配置连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/database"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis/dao/User.xml"></mapper>
</mappers>
</configuration>

user.xml

<!--映射路径-->
<mapper namespace="com.mybatis.dao.IUseDao">
<!--
注意点:#{}里面的字段对应的是实体类中getter后面的字段开头字母小写.如getUserName 对应的就是userName
resultType:返回值类型
parameterType:参数类型
id:对应接口中的方法(对应映射路径中的方法)
--> <!--
resultMap 主要作用是让实体类与数据库表中字段名映射上
如果实体类与数据库中字段名在不区分大小写的情况下相同的话,那就不需要配置resultMap,因为mysql数据库不区分大小写,所以可以
直接映射上 但是如果实体类与数据库中字段名不相同的话,我们可以由三个解决方案
1. 直接修改数据库字段名,使之与实体类对应上
2. 在程序中配置文件中对sql语句改造,起别名,使之与实体类映射上 (直接操作sql语句效率更高)
如: select gender as usergender,age as userage from user;
3. 写配置文件 resultMap,使之映射上,但是需要修改resultType="com.mybatis.entry.User" 为 resultMap="userMap" (方便) -->
<resultMap id="userMap" type="com.mybatis.entry.User">
<!--首先配置主键对应-->
<id column="uid" property="userUid"></id>
<!--其他属性配置-->
<result column="username" property="userName"></result>
<result column="gender" property="userGender"></result>
<result column="age" property="userAge"></result>
</resultMap>
<!--获得所有用户列表-->
<!--<select id="getUsers" resultMap="userMap">-->
<select id="getUsers" resultType="com.mybatis.entry.User">
select * from user
</select>
<!--添加一条信息-->
<insert id="saveUser" parameterType="com.mybatis.entry.User">
<!--配置插入操作后,获取插入数据的id
keyProperty: 指定返回的id映射到bean中的哪个属性
keyColumn: 插入数据以后,要返回的内容在数据表中对应的字段名称
order AFTER :表示这个selectKey语句的执行是在insert语句之后
-->
<selectKey keyProperty="uid" keyColumn="uid" order="AFTER" resultType="INT">
select last_insert_id();
</selectKey>
insert into user(username,gender,age) values (#{userName},#{gender},#{age})
</insert>
<!--删除一条信息-->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where uid=#{uid}
</delete>
<!--更新一条信息-->
<update id="updateUser" parameterType="com.mybatis.entry.User">
update user set username=#{userName},gender=#{gender},age=#{age} where uid=#{uid}
</update>
<!--
模糊查询:模糊查询的时候可以使用一个字段作为占位符,然后再测试类或者被调用的时候加上百分号
-->
<!--<select id="getUsers" resultMap="userMap">-->
<select id="findByName" parameterType="java.lang.String" resultType="com.mybatis.entry.User">
select * from user where username like #{name}
</select> <!--查询总条数-->
<select id="findTotal" resultType="INT">
SELECT COUNT(1) FROM USER
</select> <!--根据多个对象查询,需要将实体类以及其他属性再封装一层成为新的实体类-->
<!--<select id="getUsers" resultMap="userMap">-->
<select id="findByVo" resultType="com.mybatis.entry.User" parameterType="com.mybatis.entry.Vo">
select * from user where username=#{user.userName} and gender=#{user.gender}
</select>
</mapper>

接口

public interface IUseDao
{
/**
* 查询所有用户
* @return
*/
public List<User> getUsers(); /**
* 添加用户
* @return
*/
public boolean saveUser(User user); /**
* 删除用户
* @return
*/
public void deleteUser(int uid); /**
*修改用户
*/
public void updateUser(User user); /**
* 模糊查询
* @param username
* @return
*/
public List<User> findByName(String username); /**
* 查询总记录条数
* @return
*/
public int findTotal(); /**
* 根据新封装的实体类去查询(多条件查询)
* @param vo 将多个条件封装成一个实体类
* @return
*/
public List<User> findByVo(Vo vo);
}

测试类

public class mybatisTest {
private InputStream inputStream=null;
private SqlSession sqlSession=null;
private IUseDao userDao=null;
private SqlSessionFactory sessionFactory=null; @Before
public void init() throws Exception
{
inputStream=Resources.getResourceAsStream("mybatis-config.xml");
sessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
sqlSession=sessionFactory.openSession();
userDao=sqlSession.getMapper(IUseDao.class);
} @After
public void destroy() throws Exception
{
sqlSession.commit();
sqlSession.close();
inputStream.close();
} @Test
public void testFindAll() throws Exception {
List<User> list=userDao.getUsers();
for (User user:list) {
System.out.println(user);
}
} @Test
public void testSaveUser() throws Exception{
User user=new User();
user.setUserName("xxx");
user.setAge(20);
user.setGender("男");
/*获取保存前的id*/
System.out.println(user.getUid());
userDao.saveUser(user);
/*获取保存后的id*/
System.out.println(user.getUid());
} @Test
public void testDeleteUser() throws Exception
{
int uid=3;
userDao.deleteUser(uid);
} @Test
public void testUpdateUser() throws Exception{
User user=new User();
user.setUid(5);
user.setUserName("test");
user.setAge(20);
user.setGender("男");
userDao.updateUser(user);
} @Test
public void testFindByName() throws Exception{
List<User> users = userDao.findByName("%x%");
for (User user:users)
{
System.out.println(user);
}
} @Test
public void testFindTotal() throws Exception{
int total = userDao.findTotal();
System.out.println(total);
} @Test
public void testFindByVo() throws Exception{
Vo vo=new Vo();
User user=new User();
user.setUserName("xxx");
user.setGender("男");
vo.setUser(user);
List<User> vos = userDao.findByVo(vo);
for (User user1:vos)
{
System.out.println(user1);
}
}
}

mybatis 基础(一) xml配置的更多相关文章

  1. MyBatis Generator generatorConfig.xml配置详解

    所有Generator的xml详细说明见:http://mybatis.org/generator/configreference/xmlconfig.html (英文版) 引用 http://blo ...

  2. mybatis 基础(二) xml文件中的其他知识点

    mybatis xml文件中一些标签的使用 此标签主要用作 配置 "别名" 如果实体类与数据库中字段名在不区分大小写的情况下相同的话, 那就不需要配置resultMap,因为mys ...

  3. Spring+springmvc+Mybatis整合案例 xml配置版(myeclipse)详细版

    Spring+springmvc+Mybatis整合案例 Version:xml版(myeclipse) 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version ...

  4. Hibernate——基础及XML配置

    1.入门 hibernate是跟数据库打交道的,一般跟数据库打交道的都不简单 原始.底层直接的一些操作.编码量比较大.费时.用框架高效 把原来一点一点实现的东西,现在给个半成品,不用在这上边发时间,把 ...

  5. MyBatis 关系映射XML配置

    关系映射 在我看来这些实体类就没啥太大关联关系,不就是一个sql语句解决的问题,直接多表查询就完事,程序将它设置关联就好 xml里面配置也是配置了sql语句,下面给出几个关系的小毛驴(xml) 一对多 ...

  6. 使用Mybatis时mybatis-config.xml配置中"configuration" 的内容必须匹配 (.....)解决方案

    一.简述 使用Mybatis配置mybatis-config配置文件时,经常遇到下列报错信息:org.xml.sax.SAXParseException; lineNumber: 36; column ...

  7. Spring集成mybatis时mybatis的映射XML配置

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  8. Mybatis 代码自动生成(generatorConfig.xml配置)

    博客推荐: Mybatis最入门---代码自动生成(generatorConfig.xml配置) MyBatis Generator generatorConfig.xml配置详解 pom.xml&l ...

  9. MyBatis 源码分析——配置信息

    MyBatis框架的启动前期需要加载相关的XML配置信息.从官网上我们可以了解到他具有十几个节点.其中笔者认为比较重要的节点是settings节点.properties节点.environments节 ...

随机推荐

  1. 配置魔药(DP)

    配置魔药 [问题描述] 在<Harry Potter and the Chamber of Secrets>中,Ron的魔杖因为坐他老爸的Flying Car撞到了打人柳,不幸被打断了,从 ...

  2. java中的变量和数据类型

    变量和javascript的变量含义一样 在Java中,变量分为两种:基本类型的变量和引用类型的变量.(javascript中同样是这样的) 基本数据类型 基本数据类型是CPU可以直接进行运算的类型. ...

  3. 【APUE】第3章 文件I/O (3) 文件共享、原子操作、函数dup/dup2、函数sync/fsync/fdatasync、函数fcntl、函数ioct1、目录/dev/fd 使用说明

    1.文件共享 UNIX系统支持在不同的进程间共享打开文件.为了说明这种共享,以下介绍内核用于所有I/O的数据结构. 内核使用3种数据结构表示打开文件,它们之间的关系决定了在文件共享方面一个进程对另一个 ...

  4. 预处理、const、static与sizeof-为什么不把所有的函数都定义成内联函数

    1:内联是以代码膨胀(复制)为代价的,仅仅省去了函数调用的开销,从而提高函数的执行效率.如果执行函数体内代码的时间相比于函数调用的开销较大,那么效率的收获会很小.另一方面,每一处内联函数的调用都要复制 ...

  5. Redis 4.x RCE 复现学习

    攻击场景: 能够访问远程redis的端口(直接访问或者SSRF) 对redis服务器可以访问到的另一台服务器有控制权 实际上就是通过主从特性来 同步传输数据,同时利用模块加载来加载恶意的用来进行命令执 ...

  6. Qt Delgate的使用 简单说明

    (一) Qt Model/View 的简单说明 .预定义模型 (二)使用预定义模型 QstringListModel例子 (三)使用预定义模型QDirModel的例子 (四)Qt实现自定义模型基于QA ...

  7. dev exception 2018

    java.lang.IllegalArgumentException: Circular placeholder reference 'trace.enable' in property defini ...

  8. 初写C#的小总结

    虽然大学学过很多计算机语言,但是现在工作是前端,一个刚入行的前端菜鸟,之前对于后台完全零接触,但是最近有个项目,我也是第一次真正接触C#,中间遇到了一些小问题,就做个总结记录下,真的是超级简单的小知识 ...

  9. [MySql]MySql中外键设置 以及Java/MyBatis程序对存在外键关联无法删除的规避

    在MySql设定两张表,其中product表的主键设定成orderTb表的外键,具体如下: 产品表: create table product(id INT(11) PRIMARY KEY,name ...

  10. SRCNN代码分析

    代码是作者页面上下载的matlab版.香港中文大学汤晓鸥教授.Learning a Deep Convolutional Network for Image Super-Resolution. htt ...