笔记——Mybatis

目录

在这里插入图片描述

SqlMapConfig.xml

在environments中配置与数据库连接的相关信息。
在mappers中映射去实现dao。

<?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的主配置文件-->
<configuration>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql环境-->
        <environment id="mysql">
           <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源(连接池)-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="..."/>
                <property name="username" value="..."/>
                <property name="password" value="..."/>
            </dataSource>
        </environment>
    </environments>

    <!--指定  映射配置文件(每个dao独立的配置文件) 的位置-->
    <mappers>
    	<!-- xml实现 -->
        <mapper resource="com/by/dao/IDocDao.xml"/>
        <!-- 注解实现 -->
        <mapper class="com.by.dao.IUserDao"/>
    </mappers>
</configuration>

log4j.properties

不知道,抄的

### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=//logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=//logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

IDocDao(xml)

dao是一个接口。

public interface IDocDao {
    List<Doc> findAll();
}

注意Doc类需要序列化。

public class Doc implements Serializable {
	//属性:与数据库中表的列名同类同名
	//方法:属性的getter、setter
}

需要四个信息:dao的全限定类名,方法名,返回类型,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="com.by.dao.IDocDao">
    <!--配置findAll方法-->
    <select id="findAll" resultType="com.by.domain.Doc">
        select * from Doc;
    </select>
</mapper>

IUserDao(注解)

相比于xml实现的dao类,只多了一个注解,和里面的sql语句。

public interface IUserDao {
    @Select("select * from user;")
    List<User> findAll();
}
public class User implements Serializable {
	//属性:与数据库中表的列名同类同名
	//方法:属性的getter、setter
}

查找

public class MybatisTest {
    private InputStream is;
    private SqlSession sqlSession;
    private IDocDao docDao;
    private IUserDao userDao;

    @Before()
    public void init() throws IOException {
        //读取配置文件
        is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //创建SqlSession静态工厂类
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //使用工厂生成SqlSession
        sqlSession = factory.openSession();
        //使用SqlSession生成代理对象
        docDao = sqlSession.getMapper(IDocDao.class);
        userDao = sqlSession.getMapper(IUserDao.class);
    }

    @After()
    public void destroy() throws IOException{
        is.close();
        sqlSession.close();
    }

    @Test
    public void findALLDocTest(){
        //使用dao
        List<Doc> docs = docDao.findAll();
        for(Doc doc:docs){
            System.out.println(doc);
        }
    }
    
    @Test
    public void findALLUserTest(){
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
    }
}

参数深入:传递pojo包装对象

假设我们有这么一个需求:用户信息的综合查询,需要传入的查询条件很复杂(可能包括用户信息,其他的信息,比如商品,订单),就需要一个对象来包装这些信息:用户商品订单,然后传参的时候传入这个包装对象,调用里面的所有信息。

返回值深入:别名与resultMap

当返回类的属性名与数据库的列名不一致,解决办法:

增删改:
在sql语句中,例:update doc set name = #{docName};
即数据库列名的地方写数据库的,引用pojo时写pojo的。

查:
1、使用sql语法‘别名’,select name as docName from doc;
即找数据库的name列,返回时是生成的userName列。
2、在xml中,写<resultMap>元素并调用

<mapper namespace = 'com.by.dao.IDocDao'>
	<resultMap id = 'docMap' type = 'com.by.domain.Doc'>
		<!-- 配置主键 -->
		<id property = 'docId' column = 'ID'>
		<!-- 配置其他 -->
		<result property = 'docName' column = 'name'>
		<result property = 'docDescription' column = 'description'>
	</resultMap>
	
	<select id = 'findAll' resultMap = 'docMap'>
		select * from doc;
	</select>

	<select id = 'findDocByName' resultMap = 'docMap' parameterType = 'String'>
		select * from doc where name like #{value};
	</select>
</mapper>

标签

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

<properties resource="org/mybatis/example/config.properties">
  <property name="username" value="..."/>
  <property name="password" value="..."/>
</properties>

	<dataSource type="POOLED">
	  <property name="driver" value="${driver}"/>
	  <property name="url" value="${url}"/>
	  <property name="username" value="${username}"/>
	  <property name="password" value="${password}"/>
	</dataSource>

2、类型别名(typeAliases)
类型别名是为 Java 类型设置一个短的名字。 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:

<typeAliases>
  <typeAlias alias="Author" type="domain.blog.Author"/>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
  <typeAlias alias="Comment" type="domain.blog.Comment"/>
  <typeAlias alias="Post" type="domain.blog.Post"/>
  <typeAlias alias="Section" type="domain.blog.Section"/>
  <typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

当这样配置时,Blog 可以用在任何使用 domain.blog.Blog 的地方。即要写domain.blog.Author的地方只写Author就完事了。

也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:

<typeAliases>
  <package name="domain.blog"/>
</typeAliases>

同时,<package>也可用在<mappers>中,然后再默认dao.xml在对应的位置存放,就不用一个个在<mappers>配置<mapper>了。

<mappers>
	<package resource='com.by.dao'>
</mappers>

--------标签内容部分摘自http://www.mybatis.org/mybatis-3/zh/configuration.html

多表查询

自行百度

延迟加载

自行百度

缓存

SqlSession自带一级缓存,但当调用其的增删改、commit()、close()时,会清空一级缓存

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值