配置参考链接:Mybatis参考文献
1.通过单纯的xml映射实现查询
SqlMapperConfig.xml
<?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">
<!-- 配置sql核心配置文件 -->
<configuration>
<environments default="test">
<environment id="test">
<transactionManager type="JDBC"/><!-- 使用jdbc事务 manager容器去管理,mybatis什么也不做 -->
<dataSource type="POOLED"><!-- 数据源 unpooled 非池化 pooled JNDI方式 命名服务 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/hr?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 声明调用映射文件 -->
<mappers>
<!-- 单个xml文件 -->
<mapper resource="com/feifan/UserMapper.xml"/><!-- 文件路径 -->
</mappers>
</configuration>
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="com.feifan"><!-- 在测试类中通过买命名空间+id 访问Sql语句 -->
<select id="findlist" resultType="com.feifan.pojo.User">
select * from emps
</select>
<insert id="insert" parameterType="com.feifan.pojo.User">
insert into emps (fname,lname,email,tel)values("kk",null,null,null)
</insert>
</mapper>
测试基础类BaseTest
/** 测试基础类*/
public class TestBase {
//获取sqlsessionFactory 对象
protected SqlSessionFactory sqlSessionFactory;//单例线程安全
@Before//在测试方法Test之前执行
public void init() throws Exception{
String resource="sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);//读取配置文件
sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);//获取工场对象
System.out.println("获取到sqlsessionfactory对象"+sqlSessionFactory);
}
//Test之后执行
@After
public void close() {
System.out.println("销毁单列对象"+sqlSessionFactory);
}
}
测试类:
public class TestMain extends TestBase {
@Test
public void findList(){
SqlSession openSession = sqlSessionFactory.openSession();//获取sqlsession对象
String sql="com.feifan.findlist";//mapper.xml下要执行的语句id 命名空间+id
List<User> selectList = openSession.selectList(sql);//执行查询语句
for (User user : selectList) {
System.out.println(user);
}
}
//插入数据
public void insert(){
SqlSession openSession = sqlSessionFactory.openSession();//获取sqlsession对象
String sql="com.feifan.insert";//mapper.xml下要执行的语句id 命名空间+id
User user=new User();
user.setFname("kkk");
user.setLname("kkkk");
user.setEmail("kkkk");
user.setTel("09098");
int i = openSession.insert(sql, user);//执行查询语句
System.out.println(i);
}
}
2.接口方式配置Mybatis
接口配置xml 实现查询SqlConfig.xml
<?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">
<!-- 配置sql核心配置文件 -->
<configuration>
<!-- 加载数据库属性文件-->
<properties resource="db.properties"></properties>
<!-- 设置驼峰映射规则 -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 为类起别名 后面可以用别名调用 -->
<typeAliases>
<typeAlias type="com.feifan.User" alias="User"/>
<!-- 多个类别名采用包扫描方式,别名为类名 -->
<package name=com.feifan/>
</typeAliases>
<!-- 配置环境 事务 数据源 映射文件 -->
<environments default="test">
<environment id="test">
<transactionManager type="JDBC"/><!-- 事务 JDBC(数据库自己处理)/MANAGE(meveanxici自行处理 -->
<dataSource type="POOLED"><!-- 数据源 unpooled 非池化 pooled JNDI方式 -->
<property name="driver" value="${jdbcDriver}"/>
<property name="url" value="${jdbcUrl}"/>
<property name="username" value="${jdbcUser}"/>
<property name="password" value="${jdbcPassword}"/>
</dataSource>
</environment>
</environments>
<!-- 声明调用映射文件 -->
<mappers>
<!-- <mapper resource="com/feifan/dao/UserMapper.xml"/> xml 配置方式是路径-->
<mapper class="com.feifan.dao.UserMapper"/><!-- 接口文配置是类的全名 -->
<!-- 配置包扫描可以扫描多个接口 -->
<package name="com.feifan.dao"/>
</mappers>
</configuration>
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="com.feifan.dao.UserMapper"><!-- 接口的全路径 -->
<sql id="cols">id,name,birthday,address</sql><!-- sql查询别名下面直接引用节省代码 -->
<select id="find" resultType="com.feifan.User">
<!-- select <include refid="cols"></include> from user -->
select *from user
</select>
<!-- 查询所有,resultType返回值,标识返回类型List<> -->
<select id="find1" resultType="User">
select id,name,birthday,address from user
</select>
<!-- 只返回一个值,返回一个整数值 -->
<select id="count" resultType="integer">
SELECT COUNT(*) FROM user
</select>
<!-- 获取一个用户的信息(一条记录)#{id}参数,解析获取id值 -->
<select id="get" parameterType="integer" resultType="User">
SELECT * FROM USER WHERE id = #{id}
</select>
<!-- 新增 -->
<insert id="insert">
INSERT INTO USER
(id,NAME,birthday,address)
VALUES(6,'tony','2018-06-19','北京')
</insert>
<!-- 修改 -->
<update id="update">
UPDATE User
SET NAME='tony' WHERE id=6
</update>
<!-- 删除 -->
<delete id="delete" parameterType="integer">
DELETE FROM User WHERE id=#{pid}
</delete>
<!-- 排序 -->
<select id="orderby" parameterType="map"
resultType="User">
SELECT * FROM User ${ob}
</select>
</mapper>
接口类配置:
public interface UserMapper {
List<User> find();//查找数据
//名字需和mapper.xml文件中的id一样
Integer insert();//增加数据
}
测试基类:
public class TestBase {
protected SqlSessionFactory SqlSessionFactory;//线程安全 单列
@Before
public void init() throws Exception{
String resource="sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);//读取配置文件
SqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//获取工厂对象
System.out.println(SqlSessionFactory);
}
@After
public void close(){
System.out.println("测试执行完毕"+SqlSessionFactory);
}
}
测试类:
public class TestMain extends TestBase {
//查询数据
@Test
public void test01() throws Exception{
SqlSession openSession = SqlSessionFactory.openSession();//获取sqlsession对象
UserMapper mapper = openSession.getMapper(com.feifan.dao.UserMapper.class);//获取接口对象
System.out.println(mapper);
List<User> findAll = mapper.find();//执行方法。
for (User user : findAll) {
System.out.println(user);
}
}
//查询数据
@Test
public void test01_1() throws Exception{
SqlSession openSession = SqlSessionFactory.openSession();//获取sqlsession对象,非线程安全
List<User> selectList = openSession.selectList("com.feifan.dao.UserMapper.find");
for (User user : selectList) {
System.out.println(user);
}
}
//增加数据
@Test
public void test02(){
SqlSession openSession = SqlSessionFactory.openSession();//获取sqlsession对象,
int i = openSession.insert("com.feifan.insert");//mapper.xml下要执行的语句id 命名空间+id
System.out.println("增加数据"+i);//mybatis事务。默认不是自动提交所以需要手动提交
openSession.commit();//手动提交事物
}
}
其他动态sql注意事项:
在这里插入图片描述