mybatis mysql 配置文件详解_mybatis的配置文件详解(二)

一.properties

这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。例如

1)

这种方法是将数据源的属性放在db.properties中,然后在mybatis中读取property的value值,需要在中配置一个properties的属性,

db.properties的内容如下:

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/mybatis02?useSSL=false

username=root

password=123456

2)直接将属性的value值写死在mybaties.xml

二,typeAliases

有三种方式配置typeAliases,第一种方式是手动配置别名,第二种方式是通过注解,第三种方式是通过扫描包(推荐使用该方式)

在configuration标签中添加如下标签,

通过包扫描的方式配置别名

3,注解的方式配置别名

暂时不用

三,typeHandles类型处理器无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java类型。

下表描述了一些默认的类型处理器。

b5798f05e088940c31de57c6a1f5dc88.png

四,环境配置

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库, 想使用相同的 SQL 映射。许多类似的用例。不过要记住:尽管可以配置多个环境,每个 不过要记住:尽管可以配置多个环境,每个SqlSessionFactory 实例只能选 实例只能选择其一。所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:

db.properties文件

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/mybatis02?useSSL=false

username=root

password=123456

driver2=com.mysql.jdbc.Driver

url2=jdbc:mysql://localhost:3306/mybatis?useSSL=false

username2=root

password2=123456

五,DataSource数据源

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。数据源类型有三种:UNPOOLED,POOLED,JNDI。

UNPOOLED是没有数据库连接池的,没执行一次操作,打开一次数据库,关闭一次数据库.效率较为低下

POOLED是存在数据库连接池的,没有操作数据库从数据库连接池中拿取连接

JNDI这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。

六 mapper映射器(4种配置)

第一种 配置文件路径(相对项目的相对路径)

第二种 配置文件的绝对路径(不推荐使用,随着项目的变更,路径也要改变,比较麻烦)

第三种 注解形式配置(用的相对较少)

配置注解的时候,在接口的方法要加上注解,映射文件中可以不用配置sql语句

e0cc62c3ca3e3ccd691809616b385ce4.png

第四种 映射包下所有接口(较为常用)

七,封装Dao

将UserMapper的接口实现,将接口里方法重写并且实现封装

importcom.shsxt.mapper.UserMapper;importcom.shsxt.po.User;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importjava.util.List;importjava.util.Map;public class UserMapperImpl implementsUserMapper {privateSqlSessionFactory sqlSessionFactory;publicUserMapperImpl(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory =sqlSessionFactory;

}

@OverridepublicUser queryById(Integer id) {

SqlSession session=null;

User user=null;try{

session=sqlSessionFactory.openSession();

user=session.selectOne("com.shsxt.mapper.UserMapper.queryById",id);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.close();

}

}returnuser;

}

八,增删改查,在UserMapper.xml的文件中配置

UserMapper.xm的文件配置内容如下

username,realname,password

select * from user where id=#{id}

select count(*) from user

select username from user where id =#{id}

select username from user where username like concat('%',#{username},'%')

select * from user where id=#{id}

select * from user where id=#{id} and username=#{username}

insert into user (username,realname,password) values (#{username},#{realname},#{password})

select LAST_INSERT_ID() as idinsert into user (username,realname,password) values (#{username},#{realname},#{password})

insert into user (username,realname,password) values (#{username},#{realname},#{password})

insert into user (username,realname,password) values(#{item.username},#{item.realname},#{item.password})

update user set username=#{username}, realname=#{realname},password=#{password} where id=#{id}

update user set password='88888888' where id in (#{item})

delete from user where id=#{id}

delete from user where id in (#{item})

实现类UserMapperImpl的配置如下:

packagecom.shsxt.mapper.Impl;importcom.shsxt.mapper.UserMapper;importcom.shsxt.po.User;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importjava.util.List;importjava.util.Map;public class UserMapperImpl implementsUserMapper {privateSqlSessionFactory sqlSessionFactory;publicUserMapperImpl(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory =sqlSessionFactory;

}

@OverridepublicUser queryById(Integer id) {

SqlSession session=null;

User user=null;try{

session=sqlSessionFactory.openSession();

user=session.selectOne("com.shsxt.mapper.UserMapper.queryById",id);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.close();

}

}returnuser;

}

@OverridepublicInteger queryAll() {

SqlSession session=null;

Integer a=null;try{

session=sqlSessionFactory.openSession();

a=session.selectOne("com.shsxt.mapper.UserMapper.queryAll");

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.close();

}

}returna;

}

@OverridepublicString queryUname(Integer id) {

SqlSession session=null;

String abc=null;try{

session=sqlSessionFactory.openSession();

abc=session.selectOne("com.shsxt.mapper.UserMapper.queryUname", id);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.close();

}

}returnabc;

}

@Overridepublic ListqueryByName(User user) {

SqlSession session=null;

List list=null;try{

session=sqlSessionFactory.openSession();

list=session.selectList("com.shsxt.mapper.UserMapper.queryByName", user);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.close();

}

}returnlist;

}

@OverridepublicMap queryIdByMap(Integer id) {

SqlSession sqlsession=null;

Map map=null;try{

sqlsession=sqlSessionFactory.openSession();

map=sqlsession.selectOne("com.shsxt.mapper.UserMapper.queryIdByMap",id);

}catch(Exception e){

e.printStackTrace();

}finally{if(sqlsession!=null){

sqlsession.close();

}

}returnmap;

}

@OverridepublicInteger insertByUser(User user) {

SqlSession session=null;

Integer a=null;try{

session=sqlSessionFactory.openSession();

a=session.insert("com.shsxt.mapper.UserMapper.insertByUser",user);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.close();

}

}returna;

}

@OverridepublicInteger insertByUserHasKey(User user) {

SqlSession session=null;

Integer a=null;try{

session=sqlSessionFactory.openSession();

a=session.insert("com.shsxt.mapper.UserMapper.insertByUserHasKey",user);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.commit();

session.close();

}

}returna;

}

@OverridepublicInteger insertByUserHasKey02(User user) {

SqlSession session=null;

Integer a=null;try{

session=sqlSessionFactory.openSession();

a=session.insert("com.shsxt.mapper.UserMapper.insertByUserHasKey02",user);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.commit();

session.close();

}

}returna;

}

@Overridepublic Integer insertByUserBatch(Listlist) {

SqlSession session=null;

Integer a=null;try{

session=sqlSessionFactory.openSession();

a=session.insert("com.shsxt.mapper.UserMapper.insertByUserBatch",list);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.commit();

session.close();

}

}returna;

}

@OverridepublicUser queryUserByMap(Map map) {

SqlSession session=null;

User user=null;try{

session=sqlSessionFactory.openSession();

user=session.selectOne("com.shsxt.mapper.UserMapper.queryUserByMap",map);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.commit();

session.close();

}

}returnuser;

}

@OverridepublicInteger updateUser(User user) {

SqlSession session=null;

Integer a=null;try{

session=sqlSessionFactory.openSession();

a=session.update("com.shsxt.mapper.UserMapper.updateUser",user);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.commit();

session.close();

}

}returna;

}

@OverridepublicInteger updataUserBatch(Integer[] ids) {

SqlSession session=null;

Integer aa=null;try{

session=sqlSessionFactory.openSession();

aa=session.update("com.shsxt.mapper.UserMapper.updataUserBatch",ids);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.commit();

session.close();

}

}returnaa;

}

@OverridepublicInteger deleteUser(Integer id) {

SqlSession session=null;

Integer aa=null;try{

session=sqlSessionFactory.openSession();

aa=session.delete("com.shsxt.mapper.UserMapper.deleteUser",id);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.commit();

session.close();

}

}returnaa;

}

@Overridepublic Integer deleteUserBatch(Listids) {

SqlSession session=null;

Integer aa=null;try{

session=sqlSessionFactory.openSession();

aa=session.update("com.shsxt.mapper.UserMapper.deleteUserBatch",ids);

}catch(Exception e){

e.printStackTrace();

}finally{if(session!=null){

session.commit();

session.close();

}

}returnaa;

}

}

测试单元的代码如下:

packagecom.shsxt;importcom.shsxt.mapper.Impl.UserMapperImpl;importcom.shsxt.mapper.UserMapper;importcom.shsxt.po.User;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Before;importorg.junit.Test;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;public classTest_mybatis02 {

SqlSessionFactory sqlSessionFactory;

@Beforepublic void ready() throwsIOException {

InputStream inputStream= Resources.getResourceAsStream("mybatis.xml");

sqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);

}/** queryById*/@Testpublic voidtest01(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

User user= userMapper.queryById(1);

System.out.println(user);

}

@Testpublic voidtest02(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

Integer a=userMapper.queryAll();

System.out.println("总数量是:"+a);

}

@Testpublic voidtest03(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

String aa= userMapper.queryUname(1);

System.out.println("id为1的uname是:"+aa);

}

@Testpublic voidtest04(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

User user=newUser();

user.setUser_name("hello");

List lists =userMapper.queryByName(user);for(User per_user :lists) {

System.out.println(per_user);

}

}

@Testpublic voidtest05(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

Map map= userMapper.queryIdByMap(1);

System.out.println(((Map) map).toString());

}

@Testpublic voidtest06(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

User user=newUser();

user.setUser_name("ahah");

user.setRealname("papapa");

user.setPassword("89533");

Integer aavv=userMapper.insertByUser(user);

System.out.println(aavv);

}

@Testpublic voidtest07(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

User user=newUser();

user.setUser_name("ahah");

user.setRealname("papapa");

user.setPassword("89533");

Integer aavv=userMapper.insertByUserHasKey(user);

System.out.println("受影响的行数: "+aavv);

System.out.println("返回的id是: "+user.getId());

}

@Testpublic voidTest08(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

User user=newUser();

user.setUser_name("ahah");

user.setRealname("papapa");

user.setPassword("89533");

Integer aavv=userMapper.insertByUserHasKey02(user);

System.out.println("受影响的行数: "+aavv);

System.out.println("返回的id是: "+user.getId());

}

@Testpublic voidTest09(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

List list=new ArrayList<>();for (int i = 0; i <10 ; i++) {

User user=newUser();

user.setUser_name("haha"+i);

user.setPassword("123456"+i);

user.setRealname("hehe"+i);

list.add(user);

}

Integer aavv=userMapper.insertByUserBatch(list);

System.out.println("受影响的行数: "+aavv);

}

@Testpublic voidTest10(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

Map map=newHashMap();

map.put("id",1);

map.put("username","hello");

User user=userMapper.queryUserByMap(map);

System.out.println(user);

}

@Testpublic voidTest11(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

User user=newUser();

user.setRealname("laodu");

user.setPassword("888888");

user.setUser_name("liudaye");

user.setId(1);

Integer a=userMapper.updateUser(user);

System.out.println(a);

}

@Testpublic voidTest12(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

Integer[] aa=new Integer[10];for (int i = 0; i < 10; i++) {

aa[i]=i+10;

}

Integer a=userMapper.updataUserBatch(aa);

System.out.println(a);

}

@Testpublic voidTest13(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

Integer a= userMapper.deleteUser(22);

System.out.println(a);

}

@Testpublic voidTest14(){

UserMapper userMapper=newUserMapperImpl(sqlSessionFactory);

List list=new ArrayList<>();for (int i = 10; i < 20; i++) {

list.add(i);

}

Integer a=userMapper.deleteUserBatch(list);

System.out.println(a);

}

}

九,sql片段和动态sql

ql 元素用来定义一个可以复用的 SQL 语句段,供其它语句调用,例如

userId, userName, password

from user where userId =#{userId}

Batis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。

利用动态 SQL 这一特性,可以彻底摆脱这种痛苦。它借助 ognl(类似于 jsp 里面的 el 表达式)表达式来完成动态 sql 的拼接使得非常简便。

1,条件判断 使用 if 标签就是加一个 test 属性作为判断, 如果有多个条件组合判断的话用 and, or连接

select * from user where 1=1and username like concat('%',#{username},'%')

测试方法

importcom.shsxt.mapper.UserMapper;importcom.shsxt.po.User;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Before;importorg.junit.Test;importjava.io.InputStream;importjava.util.List;public classmybaties03_Test {privateUserMapper userMapper;

@Beforepublic void before() throwsException{

InputStream inputStream= Resources.getResourceAsStream("mybatis.xml");

SqlSessionFactory sqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);

SqlSession sqlSession=sqlSessionFactory.openSession();

userMapper=sqlSession.getMapper(UserMapper.class);

}

@Testpublic voidtest02(){

List list=userMapper.queryByName("li");for(User user:list) {

System.out.println(user);

}

}

}

2,choose,when,otherwise

我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句

select id,

username

password

from user

测试方法

importcom.shsxt.mapper.UserMapper;importcom.shsxt.po.User;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Before;importorg.junit.Test;importjava.io.InputStream;importjava.util.List;public classmybaties03_Test {privateUserMapper userMapper;

@Beforepublic void before() throwsException{

InputStream inputStream= Resources.getResourceAsStream("mybatis.xml");

SqlSessionFactory sqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);

SqlSession sqlSession=sqlSessionFactory.openSession();

userMapper=sqlSession.getMapper(UserMapper.class);

}

@Testpublic voidtest03(){

List list=userMapper.queryByParams("hello");for(User user:list) {

System.out.println(user);

}

}

}

10,mapper  接口代理方式的 crud  开发

对于 mapper 接口方式开发,需要遵循 mybatis 开发规范,mybatis 框架可以自

动生成 mapper 接口对象。

完成账户表 crud 操作

开发规则:

1. mapper.xml 中 namespace 等于接口类全限定名

2. mapper.java 接口中的方法名必须与 mapper.xml 中 statement id 一致

3. mapper.java 输入参数类型必须与 mapper.xml 中 statement 的

parameterType 参数类型一致

4.mapper.java 中方法的返回值类型必须与 mapper.xml 中对应 statement 返回

值类型一致。

接口名 与映射文件名称 一致(非集成环境)

映射文件与接口处于同一个包中(非集成环境

InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");

SqlSessionFactory sqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);

SqlSession sqlSession=sqlSessionFactory.openSession();

userMapper=sqlSession.getMapper(UserMapper.class);

说白了就是我们不需要手动创建实现类了,mybatis的框架会帮我们通过动态代理来创建实现类,我们只需要用接口去接收创建好的实现的对象就可以了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值