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

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. 2018CCPC桂林站G Greatest Common Divisor

    题目描述 There is an array of length n, containing only positive numbers.Now you can add all numbers by ...

  2. Restorator 2018 v3.90汉化注册版 含注册码汉化激活教程

    链接:https://pan.baidu.com/s/1wfh5VQfNgbDr-glezL4faQ 提取码:y507

  3. mysql 日期字符串互转

    字符串转日期select str_to_date('2008-4-2 15:3:28','%Y-%m-%d %H:%i:%s');select str_to_date('2008-08-09 08:9 ...

  4. nginx 部署前端项目(vue)

    前提:安装好nginx 打开nginx目录,一般是(/usr/local/nginx) npm run build 打好vue包 一般放到(/usr/local/nginx/html/)目录下 配置: ...

  5. 之前有面试到两个日期的大小比较方式,现在整理一下几种方法。   例子:   String beginTime=new String("2017-06-09 10:22:22");     String endTime=new String("2017-05-08 11:22:22");  1  直接用Date自带方法before()和after()比较 SimpleDateFormat d

    各种数据类型(日期/时间.integer.floating point和numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成指定的数据类型.下面列出了这些函数,它们都遵循一个公共的调用 ...

  6. Eureka参数配置项详解

    Eureka涉及到的参数配置项数量众多,它的很多功能都是通过参数配置来实现的,了解这些参数的含义有助于我们更好的应用Eureka的各种功能,下面对Eureka的配置项做具体介绍,供大家参考. Eure ...

  7. [MyBatis]五分钟向MySql数据库插入一千万条数据 批量插入 用时5分左右

    本例代码下载:https://files.cnblogs.com/files/xiandedanteng/InsertMillionComparison20191012.rar 我的数据库环境是mys ...

  8. 关闭tslint

    只需要在tslint.config里配置一行 "defaultSeverity": "none",

  9. AJAX异步对象,即XMLHttpRequest

    //创建AJAX异步对象,即XMLHttpRequest function createAJAX(){ var ajax = null; try{ ajax = new ActiveXObject(& ...

  10. Mybatis中表名当做变量

    做业务时,有时候会遇到不同SQL语句之中,只有使用的表名不用而已,其他参数和取得值都是一样的情况.这种时候必然想到把表名当做一个变量传到共通的SQL语句中. 当然正常的传入参数的方式#{param}肯 ...