MyBatis完成简单的CRUD

一、认识

MyBatis是一个ORM持久化框架,可以使用XML或是注解方式将接口或JAVA domain,以SqlSession对象完成数据库的交互细节。

二、JDBC、mybatis、jpa的区别

JDBC重复代码多,开发效率低,运行效率快,性能不太好;mybatis对JDBC进行了简单的封装,开发效率比JDBC快一些,运行效率也快,上手简单;而jpa是ORM规范,对它进行了实现的hibernate虽然上手麻烦些,运行效率慢些。但是开发效率快。

三、简单使用完成CRUD

1.导包

mybatis核心包、依赖包、数据库驱动支持包

2.配置MyBatis-Config.xml

XML必须要有一个根configuration,需要设置环境们environments ,事务transactionManager ,连接池dataSource ,还有domain的映射配置文件。

可以为映射配置文件里的返回结果类型parameterType配置别名(domain用typeAliases,包用package ),别名不区分大小写

注意标签的使用是有顺序的

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 3         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 4 
 5 <!--根 XML必需有一个根-->
 6 <configuration>
 7     <!--引入properties-->
 8     <properties resource="jdbc.properties"></properties>
 9     <!--别名  不区分大小写-->
10     <typeAliases>
11         <!--一个domain的别名-->
12         <!--<typeAlias type="cn.itsource.domain.Product" alias="product"></typeAlias>-->
13         <!--配置一个包的别名 别名就是类名-->
14         <package name="cn.itsource.domain"></package>
15     </typeAliases>
16     <!--环境们   default默认环境-->
17     <environments default="development">
18         <!--默认的开发环境-->
19         <environment id="development">
20             <!--
21                  配置事务管理器的类型  type=”[JDBC|MANAGED]”
22                     JDBC:使用JDBC的默认事务功能
23                     MANAGED:这个配置几乎没做什么(没有事务)
24             -->
25             <transactionManager type="JDBC"/>
26             <!--
27                   dataSource:连接池(数据源) 肯定要写这四个数据库配置
28                       以后集成会改成:DBCP/C3P0
29                -->
30             <dataSource type="POOLED">
31                 <!--连接到数据库-->
32                 <property name="driver" value="${jdbc.driver}"/>
33                 <property name="url" value="${jdbc.url}"/>
34                 <property name="username" value="${jdbc.username}"/>
35                 <property name="password" value="${jdbc.password}"/>
36             </dataSource>
37         </environment>
38     </environments>
39     <!--映射domain里的配置文件-->
40     <mappers>
41         <mapper resource="cn/itsource/domain/productMapper.xml"/>
42     </mappers>
43 </configuration>

3.配置domain映射配置文件productMapper.xml完成CRUD

完成数据库交互的配置文件

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 3         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 
 5 <!--
 6     namespace  命名空间≈类名  配合id用来调用sql
 7     id≈方法名
 8     parameterType:参数类型  *****注意是权限定名****
 9     resultType:每一条结果的结果类型 ****注意是每一条数据的结果****
10     *****long表示Long   _long表示long*****因为不会区分大小写,所以用 _区分
11 -->
12 <mapper namespace="cn.itsource.domain.ProductMapper">
13     <!--
14     id:随便取
15     type:对象全限定名或是别名
16     -->
17     <resultMap id="ProductMap" type="product">
18         <id column="id" property="id"></id>
19         <!--数据库字段与domain字段统一-->
20         <result column="dir_id" property="dirId"></result>
21     </resultMap>
22     <!--查询一条-->
23     <select id="findOne" parameterType="long" resultMap="ProductMap">
24       select * from product where id = #{id}
25     </select>
26     <!--查询全部-->
27     <select id="findAll"  resultMap="ProductMap">
28       select * from product
29     </select>
30     <!--
31         保存
32         useGeneratedKeys="true" keyColumn="id" keyProperty="id"获取id
33     -->
34     <insert id="save" parameterType="product"
35     useGeneratedKeys="true" keyColumn="id" keyProperty="id"
36     >
37       insert into  product(productName,dir_id,salePrice,supplier,brand,cutoff,costPrice)
38       values(#{productName},#{dirId},#{salePrice},#{supplier},#{brand},#{cutoff},#{costPrice} )
39     </insert>
40     <!--修改-->
41     <update id="update" parameterType="cn.itsource.domain.Product" >
42       update product set productName=#{productName},dir_id=#{dirId},
43       salePrice=#{salePrice},supplier=#{supplier},brand=#{brand},cutoff=#{cutoff},costPrice=#{costPrice} where id=#{id}
44     </update>
45     <!--删除-->
46     <delete id="delete" parameterType="long" >
47         delete  from product where id=#{id}
48     </delete>
49 </mapper>

3.测试

 1    @Test
 2     public void testFindOne() throws Exception{
 3        //读取配置文件
 4         Reader reader = Resources.getResourceAsReader("MyBatis-Config.xml");
 5         //创建工厂
 6         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
 7         //创建session
 8         SqlSession session = factory.openSession();
 9         //调用方法   ******命名空间.id  参数******
10         Product p = session.selectOne("cn.itsource.domain.ProductMapper.findOne", 1L);
11         System.out.println(p);
12         //关闭session
13         session.close();
14     }

4.${}与#{}的区别

$里需要传入的是对象。完成sql是用的字符串的拼接

#里面可以随便传值。完成sql是用的占位符?,也就是预编译,性能会高,也更安全

总结:能用#就用#,不行才用$

5.sqlSessionFactory、sqlSession的区别

sqlSessionFactory是重量级的,里面有二级缓存、连接池等数据,线程安全,总共就一个

sqlSession是轻量级的,里面有一级缓存,线程不安全,一个线程一个

四、日志配置

1.导入日志包

2.日志properties配置文件

# 全局:你要打印的东西:只打印错误
log4j.rootLogger=ERROR, stdout
#log4j.rootLogger=NONE
#把******左边包名改成你自己的包名*****
#局部要求 ERROR:错误  Warn:警告 Info:信息 Debug:调试 TRACE:详细
log4j.logger.cn.itsource=Warn  

#代表的是打印的位置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#打印的格式(可以灵活地指定布局模式)
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#这里就是自定义的格式 %d:时间  %p:级别
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

3.测试

 1     /*
 2     #有层级 error<warn<info<debug<trace
 3      */
 4     @Test
 5     public void test() throws Exception{
 6         Logger logger = Logger.getLogger(TestLog.class);
 7         logger.trace("我是详细日志");
 8         logger.debug("我是调试日志");
 9         logger.warn("我是警告日志");
10         logger.error("我是错误日志");
11     }

猜你喜欢

转载自www.cnblogs.com/guangbin0125/p/10652538.html