mybatis
Posted 1024军团
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis相关的知识,希望对你有一定的参考价值。
1、mybatis简介
a):MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
b):Building SqlSessionFactory from XML(从XML配置文件中构建SqlSessionFactory)
<?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> <environments default="development"> <environment id="development"> <!-- 采用jdbc事务管理其 --> <transactionManager type="JDBC"/> <!-- 配置数据源 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="111"/> </dataSource> </environment> </environments> <mappers> <!-- 引入实体类的映射文件 --> <mapper resource="edu/aeon/mybatis/entity/User.mapper.xml"/> </mappers> </configuration>
实体类映射文件:User.mapper.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"> <mapper namespace="edu.aeon.mybatis.entity"> <select id="selectAllUsers" resultType="edu.aeon.mybatis.entity.User"> select * from user </select> </mapper>
c):编写User实体类:
package edu.aeon.mybatis.entity; /** * user实体类 * @author QQ1584875179 */ public class User { //用户id private int uid; //用户名 private String uname; //用户密码 private String upw; //↓setter/getter public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpw() { return upw; } public void setUpw(String upw) { this.upw = upw; } @Override public String toString() { return uid+"\\t"+uname+"\\t"+upw; } }
因为我们每次操作数据库都要获得session(和数据库进行会话/通信)、所以便于代码的复用我们写一个获得session的工具类(MyBatisUtils.java):
package edu.aeon.mybatis.utils; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; /** * mybatis工具类 * @author QQ1584875179 */ public class MyBatisUtils { /** * @param resource 构建资源来自resource * @return 通过构建资源构建的SqlSessionFactory实例 * @throws IOException 此处采取抛出异常到顶层、然后我们统一去处理 */ public static SqlSessionFactory getSqlSessionFactory(String resource) throws IOException{ InputStream inputStream = Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } /** * @param resource 构建资源来自resource * @return 通过构建资源构建的SqlSessionFactory实例的openSession()方法获得SqlSession实例 * @throws IOException 此处采取抛出异常到顶层、然后我们统一去处理 */ public static SqlSession getSqlSession(String resource) throws IOException{ return getSqlSessionFactory(resource).openSession(); } }
接下来我们写个测试类(便于测试我们前面的各种配置是否正确):
package edu.aeon.mybatis.test; import java.io.IOException; import java.util.List; import org.apache.ibatis.session.SqlSession; import edu.aeon.mybatis.entity.User; import edu.aeon.mybatis.utils.MyBatisUtils; public class Demo01Test { public static void main(String[] args) { try { SqlSession sqlSession = MyBatisUtils.getSqlSession("mybatis/mybatis.xml"); List<User> userList=sqlSession.selectList("edu.aeon.mybatis.entity.selectAllUsers"); System.out.println("用户id\\t用户名\\t用户密码"); for(User user:userList){ System.out.println(user); } } catch (IOException e) { e.printStackTrace(); } } }
数据库截图:
测试结果(控制台)截图:
可见前面我们所有的配置都是正确的!
接下来为了节省你们搭建环境以及插入测试数据、我附上本次我数据库的创建表、以及测试数据
##创建一个mybatis的数据库 create database mybatis; ##切换我们刚才创建的mybatis数据库为当前数据库 use mybatis; ##创建(user)表 create table user(uid int(3) primary key auto_increment,uname varchar(16),upw varchar(16)); ##想user表中插入5条测试数据 insert into user(uname,upw) values(\'lzj1\',\'aeon1\'); insert into user(uname,upw) values(\'lzj2\',\'aeon2\'); insert into user(uname,upw) values(\'lzj3\',\'aeon3\'); insert into user(uname,upw) values(\'lzj4\',\'aeon4\'); insert into user(uname,upw) values(\'lzj5\',\'aeon5\');
最后我们对配置文件进行一次简化操作:
a):简化mybatis的核心配置文件
<?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="database/database_mysql.properties"/> <typeAliases> <!-- 目的:简化配置文件的繁琐性、以前由包名+类名的形式均可变成所指定的别名类型、或者通过包名所配置后的类类型 --> <!-- 第一种方式:为type属性中的内容指定引用别名为alias中的内容、指定之后所有关于type中的类型均可由alias内容代替 --> <!-- <typeAlias type="edu.aeon.mybatis.entity.User" alias="User"/> --> <!-- 第二种方式:通过包名配置、配置后所有该包下的类型均可有类名代替、不需要由以前的包名+类名的形式 --> <package name="edu.aeon.mybatis.entity"/> </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="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <!-- 引入实体类到数据库的sql映射文件 --> <mapper resource="edu/aeon/mybatis/entity/User.Mapper.xml"/> </mappers> </configuration>
b):简化实体类到数据库的sql映射文件
<?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="edu.aeon.mybatis.entity.UserMapper"> <insert id="insertUser" useGeneratedKeys="true" parameterType="User"> insert into user(uname,upw) values(#{uname},#{upw}) </insert> <delete id="deleteUser" parameterType="int"> delete from user where uid = #{uid} </delete> <update id="updateUser" parameterType="User"> update user set uname=#{uname},upw=#{upw} where uid=#{uid} </update> <select id="selectAllUsers" resultType="User"> select uid,uname,upw from user </select> <select id="selectUser" resultType="User"> select * from user where uid = #{uid} </select> </mapper>
c):附上database_mysql.properties配置信息
driver = com.mysql.jdbc.Driver url = jdbc:mysql://localhost:3306/mybatis username = root password = 111
解决实体类属性名和数据库表字段映射不一致获取不到值的情况:
a):给数据库表字段起别名,别名对应类属性即可
b):类属性和数据库表字段重新映射
<select id="selectAllUsers" resultMap="UserMap"> select uid,uname,upw from user </select> <!-- 此处重新映射了实体类属性名和数据库字段 、当然只针对需要重新映射的sql语句 (resultMap="UserMap"__id="UserMap") --> <resultMap type="User" id="UserMap"> <id property="uid" column="uid"/> <result property="uname" column="uname"/> <result property="upw" column="upw"/> </resultMap>
资源整理:
链接:https://pan.baidu.com/s/1x2Exj8l2ZGA0ChY6wUgE2w
提取码:d9mh
mybatis增删改查:
链接:https://pan.baidu.com/s/1jTB3aiUfyIhhRLvRTra7Vg 提取码:bve0
以上是关于mybatis的主要内容,如果未能解决你的问题,请参考以下文章
SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper
MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段