从项目结构来看mybatis的使用
我是从一个最基础的java项目来练习使用mybatis的,项目整体框架如图:
其中:
- libs目录:存放了需要的类库,包括mybatis的库和mysql 的
- java目录下使用有三个目录:
- Beans:存放bean类
- MapperInterfaces目录:存放对某一个bena操作的接口描述
- Utiles:存放一些工具类,这里只有生成SqlSession的类MySqlSessionFactory
- MainClass:测试程序
- resources:
- 存放mapper的xml文件
- config.properties:数据库连接的配置文件
- mybatis-config.xml:mybatis的配置文件
对关键文件做出解释:
- mybatis-config.xml文件
"> <!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--必须放在文件的最前面,数据库的地址配好了-->
<!--setting不用自己来配置,基本不用自己来管-->
<settings>
<!-- Globally enables or disables any caches configured in any mapper under this configuration -->
<setting name="cacheEnabled" value="true"/>
<!-- Sets the number of seconds the driver will wait for a response from the database -->
<setting name="defaultStatementTimeout" value="3000"/>
<!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- Allows JDBC support for generated keys. A compatible driver is required.
This setting forces generated keys to be used if set to true,
as some drivers deny compatibility but still work -->
<setting name="useGeneratedKeys" value="true"/>
</settings>
<!-- Continue going here -->
<!--后面的主机名必须使用127.0.0.1-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/blog?autoReconnect=true"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<!--要在这里说明都定义了哪些mapper,以便mybatis去找这个mapper
其实是mapper文件最终都被转化成了实现了BlogMapper这个接口的类文件(我也是猜的。。。)-->
<!--以后工程大了后,这里应该会有很多的mapper的,会映射到我们写的mapper.xml文件-->
<mappers>
<mapper resource="mappers/blogMapper.xml"/>
</mappers>
</configuration>
这个文件基本上不用改动,使用Intellij会自动生成,mapper.xml文件如下
2. 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="Mapper.MapperInterfaces.BlogMapper">
<!--mybatis在这里找到了连接数据库的语句,并执行之-->
<select id="selectBlog" resultType="Beans.Blog">
select * from Blog where id = #{id}
</select>
<insert id="addBlog" parameterType="Beans.Blog">
INSERT INTO Blog (id, name) VALUES (#{id},#{name})
</insert>
</mapper>
那么我们怎么在java程序代码中去告诉mybatis我们要执行哪一条语句呢?这就要有Mapper对应的interface啦
3.BlogMapper(interface)
package Mapper.MapperInterfaces;
import Beans.Blog;
/**
* 仅仅是定义了两个方法,注意,这里的方法名一定要和mapper.xml文件中定 *义的语句的id号码是一致的,这样才能找到。
* 从这个类中去找具体的实现语句,在mapper.xml文件中
* Created by fei on 5/2/15.
*/
public interface BlogMapper {
Blog selectBlog(int id);
int addBlog(Blog blog);
}
这样我们在MainClass中就可以执行操作数据库的代码了。
4.MainClass
import Beans.Blog;
import Mapper.MapperInterfaces.BlogMapper;
import Utils.MySqlSessionFactory;
import org.apache.ibatis.session.SqlSession;
/**
* Created by fei on 5/2/15.
*/
public class MainClass {
public static void main(String [] args){
//得到这个mapper的接口,方便后续的调用
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
//查询blog
Blog blog = blogMapper.selectBlog(101);
if (blog!=null){
System.out.println(blog.getName());
}
//添加Blog
Blog addedBlog = new Blog();
addedBlog.setId(2);
addedBlog.setName("li");
int status = blogMapper.addBlog(addedBlog);
System.out.print(status);
}
}
这样mybatis就能够使用了