栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

《Mybatis总结及相关配置文件》

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《Mybatis总结及相关配置文件》

目录

简介配置文件mybatis工具类测试

对应的xml文件 万能Mapdb.properties类型别名typeAliasesResultMap 结果集映射日志使用注解开发多对一和一对多

简介

​ Mybatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。
  Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
  MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

配置文件




    
        
            
            
            
            
                
                
                
                
            
        
    
    
        
    

注意这里是configuration和config.dtd,mapper.xml的要修改

mybatis工具类
package cn.bloghut.dao.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;


public class MybatisUtils {
    private static SqlSessionFactory factory;
    static {
        try {
            //使用mybatis第一步
            String resource = "mybatis-config";
            InputStream in = Resources.getResourceAsStream(resource);
            factory = new SqlSessionFactoryBuilder().build(in);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static SqlSession getSqlSession(){
        return factory.openSession(true);  //自动提交事务!
    }
}
测试
@Test
public void t1() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    User user = userMapper.getUserById(1);
    System.out.println(user);
    sqlSession.close();
}
对应的xml文件

    insert into users(name,pwd) values(#{name},#{pwd})



    update users set name=#{name},pwd=#{pwd} where id = #{id}



    delete from users where id = #{id}

注意:增删改需要提交事务

万能Map

假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!

@Test
public void t5() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    Map map = new HashMap<>();
    map.put("username", "闲言");
    map.put("password", "111");
    userMapper.addUser2(map);
    sqlSession.commit();
    sqlSession.close();
}

void addUser2(Map map);


    insert into users(name,pwd) values(#{username},#{password})

Map 传递参数,直接在sql中取出key 【parameterType=“Map”】对象传递参数,直接在sql中取对象的属性即可 【parameterType=“Object”】只有一个基本类型参数的情况下,可以直接在sql中取到多个参数用Map或注解 db.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/memmana?serverTimezone=UTC&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
类型别名typeAliases

    

也可以指定一个包名,Mybatis会在包名下面搜索java Bean ,比如:扫描实体类的包,它的默认别名就是为这个类的类型,首字母小写!


    

在实体类比较少的时候,使用第一种方式如果实体类十分多,建议使用第二种第一种可以DIY别名,第二种则不行,如果非要改,需要在实体上增加注解

@Alias("user")
public class User implements Serializable {}
ResultMap 结果集映射

ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。
  MyBatis 会在幕后自动创建一个 ResultMap,再根据属性名来映射列到 JavaBean 的属性上。


    
    
    
    

日志

    



    




    log4j
    log4j
    1.2.17

代码整体向前缩进:
选中多行代码 - 按下shift + tab键

log4j.properties

log4j.rootLogger = debug,console ,file

log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold = DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = logs/log.log
log4j.appender.file.Append = true
log4j.appender.file.Threshold = DEBUG
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

使用Log4j

import org.apache.log4j.Logger;

static Logger logger = Logger.getLogger(UserTest.class);

日志级别
info
debug
error
@Test
public void testLog4j(){
    logger.info("info:进入了testLog4j方法");
    logger.debug("debug:进入了testLog4j方法");
    logger.error("error:进入了testLog4j方法");
}
使用注解开发
@Select("select * from users")
List getUsers();



    

本质:反射机制实现
底层:动态代理!

public interface UserMapper {

    @Select("select * from users")
    List getUsers();

    
    @Select("select * from users where id = #{id}")
    User getUserById(@Param("id") int id);

    @Insert("insert into users(name,pwd) values(#{name},#{password})")
    int insert(User user);

    @Update("update  users  set name=#{name},pwd=#{password} where id = #{id}")
    int update(User user);

    @Delete("delete from users where id = #{id}")
    int delete(@Param("id")int id);
}

关于@Param注解

    基本类型的参数或者String类型,需要加上引用类型不需要加如果只有一个基本类型的话,可以忽略,但是建议都加上我们在SQL中引用的就是我们这里的@Param(“uid”)中设定的属性名

#{} 和 ${} 区别

https://blog.csdn.net/weixin_41231928/article/details/105120292
多对一和一对多

多个学生,对应一个老师
对于学生这边而言,关联…多个学生,关联一个老师【多对一】
对于老师而言,集合,一个老师,有很多学生【一对多】

按照结果嵌套查询**(连表查询)**


    select * from teacher where id = #{id}



    
    
    





小结
 关联-association
 集合-collection
 JavaType & ofType
 JavaType 用来指定实体类中的类型的
 ofType 用来指定映射到List 集合中的pojo类型 ,泛型中的约束类型

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/724297.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号