XML配置使用
在resource下进行配置:
如图:
SqlMapConfig的配置:
<?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>
<!--配置类的别名-->
<typeAliases>
<!--配置单个类的别名-->
<!-- <typeAlias type="edu.xatu.Channel" alias="Channel"/>-->
<package name="edu.xatu"/>
</typeAliases>
<!-- 配置 mybatis 的环境 -->
<environments default="mysql">
<!-- 配置 mysql 的环境 -->
<environment id="mysql">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置连接数据库的信息:用的是数据源(连接池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/cms"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 告知 mybatis 映射配置的位置 -->
<mappers>
<!-- 下面这些被注释的是手动配置映射位置-->
<!-- <mapper resource="edu/xatu/IChannel.xml"/>-->
<!-- <mapper resource="edu/xatu/dao/ChannelDao.xml"/>-->
<!-- <mapper resource="edu/xatu/dao/IChannelDao.xml"/>-->
<!-- <mapper class="edu.xatu.dao.IChannelDao"/>-->
<!-- 下面的是自动配置映射,将放映射位置的包写在这,它将自动扫描-->
<package name="edu.xatu"/>
</mappers>
</configuration>
log4j.properties:(这个是默认的,可以直接照搬)
### set log levels ###
log4j.rootLogger = debug,E,INFO,S
### 保存异常信息到单独文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = 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
### 输出INFO到日志文件 ###
log4j.appender.INFO = org.apache.log4j.DailyRollingFileAppender
log4j.appender.INFO.File = logs/info.log
log4j.appender.INFO.Append = true
log4j.appender.INFO.Threshold = INFO
log4j.appender.INFO.layout = org.apache.log4j.PatternLayout
log4j.appender.INFO.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出到控制台 ###
log4j.appender.S=org.apache.log4j.ConsoleAppender
log4j.appender.S.layout=org.apache.log4j.PatternLayout
log4j.appender.S.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
然后我们就可以进行测验了:
@Test
public void test1() {
SqlSession session = null;
try {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.创建SqlSessionFactory工厂
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生产 SqlSession 对象
session = factory.openSession();
//5.执行添加
Channel c = new Channel();
c.setCid(32111);
c.setCname("Mybatis");
c.setDescription("Mybatis");
int count = session.insert("edu.xatu.Channel.addChannel", c);//edu.xatu.Channel.addChannel查询配置的id
if (count > 0) {
System.out.println("添加成功!");
} else {
System.out.println("没添加成功!");
}
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
这里我们就执行成功了。
注解使用
我们在面对简单的Sql语句的时候我们可以直接用注解来进行配置:
package edu.xatu.dao;
import edu.xatu.Channel;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface IChannelDao {
@Insert("insert into t_channel(cid,cname,description) values(#{cid},#{cname},#{description});")
public void addChannel(Channel channel);
@Select("select * from t_channel;")
public List<Channel> findAll();
@Delete("select * from t_channel where cid=#{id};")
public void delChannel(int id);
@Select("select * from t_channel where cid=#{id};")
public Channel findByCid(int id);
}
以上就是MyBaties的基本使用方法。
我在开发中用注解进行配置的多,但是当查询语句过于复杂我们也要使用xml进行配置。
tkMybatis的使用
承接上文的SSM整合继续:
tkMybatis将我们常用的Sql语句进行封装,大大减少了我们的工作量。
Maven引用:
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
我们将Dao层的代码进行改变:
package edu.xatu.dao;
import edu.xatu.entity.Channel;
import org.apache.ibatis.annotations.Insert;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;
@Repository
public interface UserDao extends Mapper<Channel> {
// @Insert("insert into t_channel (cid,cname,description) values(#{cid},#{cname},#{description})")
// public void addChannel(Channel c);
}
只需要继承Mapper<>就行。