初识Mybatis——搭建

  听说鱼儿的记忆只有七秒,好奇,那我的记忆可以保存多长时间那?不晓得,只晓得以前学的知识点有些生疏了。某天吃饭,听到邻座某人说,人呐,要学会总结。对的,我们学过的知识点,我们经历的一些事,懂得的一些人生道理,不都需要我们好好总结下吗?于是,马上开通博客,总结。若某些知识点搞错,请评论指出,谢谢

怎样让java程序访问数据库那,我们用jdbc吧。

          首先需要注册驱动和数据库信息、操作Connection、通过statement对象执行SQL,然后将结果返回给resultSet,然后从resultSet中读取数据并转换为pojo对象,最后需要关闭数据库相关资源。而且还需要自己对jdbc过程的异常进行捕获处理。

好麻烦是不是,好多重复性的代码真的不想敲啊?那么有没有个足够灵活的持久层解决方案那

          Mybatis是一个开源的数据持久层框架,它内部封装了jdbc访问数据库的操作,支持普通的sql查询,存储过程和高级映射,几乎消除了所有的jdbc代码和参数的手工设置以及结果集的检索。其主要思想就是将程序中的大量sql语句与程序分离,配置在配置文件中,实现mybatis的灵活配置。

          ORM(对象关系映射),它是一种数据持久化技术。它在对象模型和关系型数据库之间建立对应关系,并且停供一种机制,通过javaBean对象去操作数据库表中的数据。其实mybatis就是一种半自动化的ORM实现,通过简单的xml或者注解来进行配置和原始映射,将实体类和sql语句间建立映射关系。

首先先把mybatis的框架搭起来

  1. 下载部署所需要的jar包
  2. 创建mybatis的核心配置文件mybatis-config.xml
  3. <?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>
    	<!-- 引入database.properties文件 -->
    	<properties resource="database.properties" />
    	<!--配置mybatis的log实现为LOG4J -->
    	<settings>
    		<setting name="logImpl" value="LOG4J" />
    	</settings>
    	<!-- 设置类的别名 -->
    	<!-- <typeAliases> <typeAlias alias="User" type="com.wu.pojo.User"/> 
    		这用可以简化代码量 <package name="com.wu.pojo"/> </typeAliases> -->
    	<environments default="development">
    		<environment id="development">
    			<!-- 配置事务管理 ,采用JDBC管理事务 -->
    			<transactionManager type="JDBC" />
    			<!-- POOLED是mybatis的 数据源  , JNDI是基于tomcat的数据源 -->
    			<dataSource type="POOLED">
    				<property name="driver" value="${driver}" />
    				<property name="url" value="${url}" />
    				<property name="username" value="${user}" />
    				<property name="password" value="${password}" />
    			</dataSource>
    		</environment>
    	</environments>
    	<!-- pojo的映射文件UserMapper引入到配入到配置文件中 -->
    	<mappers>
    		<!-- resource要写成路径 -->
    		<mapper resource="com/bdqn/mybatis2/dao/DayUserMapper.xml" />
    		<!-- <package name=""/> --><!-- ???用处??? -->
    	</mappers>
    </configuration>
    

      

  4. 创建持久化类pojo
  5. 创建dao接口
  6. 创建sql映射文件
  7. 编写测试类,跑起来吧,mybatis
  8. @Test
    	public void test1(){
    		SqlSession session=null;
    		try {
    			//将配置文件读取到输入流
    			InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
    			//创建过程中,解析xml配置文件,读取全部的mapper映射文件,进行具体方法的解析
    			SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
    			//SqlSession:每个线程都有自己的sqlSession实例,不共享,线程不安全,
    			session=factory.openSession();
    			DayUser user=new DayUser();
    			user.setUsername("小明ming");
    			int result=session.getMapper(DayUserMapper.class).insert(user);
    			session.commit();
    			System.out.println("=====:"+result);
    		} catch (Exception e) {
    			e.printStackTrace();
    			session.rollback();
    		}finally{
    			//关闭
    			if(null != session)
    				session.close();
    		}
    	}
    

      

pojo,dao层接口,映射文件不想写咋办。别急,mybatis给了解决方案,使用mybati代码生成器,自动生成pojo,crud基本方法和相关映射文件。

我使用的是在eclipse集成生成器插件,配置generatorConfig.xml。不想集成插件,可以maven配置生成器插件(文艺小青年的博客:https://yq.aliyun.com/articles/371726)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 配置生成器 -->
<generatorConfiguration>
 
  <!-- 引入配置文件 -->
    <properties resource="database.properties"/>
 
 <!-- 在MBG工作的时候,需要额外加载的依赖包
    location属性指明加载jar/zip包的全路径
<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />
  -->
  
<!-- 
    context:生成一组对象的环境 
    defaultModelType:指定生成对象的样式
        2,flat:所有内容(主键,blob)等全部生成在一个对象中;
    targetRuntime:
        1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
        2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;
-->
<context id="mysql" defaultModelType="flat" targetRuntime="MyBatis3Simple" >

    <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;
        一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖
     -->
    <property name="autoDelimitKeywords" value="false"/>
    <!-- 生成的Java文件的编码 -->
    <property name="javaFileEncoding" value="UTF-8"/>
    <!-- 格式化java代码 -->
    <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
    <!-- 格式化XML代码 -->
    <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
    
    <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
    <property name="beginningDelimiter" value="`"/>
    <property name="endingDelimiter" value="`"/>
    
    <!-- 注释 -->
        <commentGenerator >
            <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
            <property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳-->
            <property name="addRemarkComments" value="true"/><!-- 是否生成数据库备注信息 -->
        </commentGenerator>
    
    <!-- 必须要有的,使用这个配置链接数据库
        @TODO:是否可以扩展
     -->
     <jdbcConnection driverClass="${driver}"
            connectionURL="${url}" userId="${user}"
            password="${password}" />

    
    <!-- java类型处理器 
        用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl;
        注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMAL和 NUMERIC数据类型; 
    -->
    <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
        <property name="forceBigDecimals" value="false"/>
    </javaTypeResolver>
    
    
    <!-- java模型创建器,是必须要的元素
        targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
        targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录
     -->
    <javaModelGenerator targetPackage="com.bdqn.mybatis2.pojo" targetProject="MyBatis2">
        <!--  for MyBatis3/MyBatis3Simple
            自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter;
         -->
        <property name="constructorBased" value="false"/>
        
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="true"/>
       
        <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
        <property name="trimStrings" value="true"/>
    </javaModelGenerator>
    
    
    <!-- 生成SQL map的XML文件生成器,
        注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),
            或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置
        targetPackage/targetProject:同javaModelGenerator
     -->
    <sqlMapGenerator targetPackage="com.bdqn.mybatis2.dao" targetProject="MyBatis2">
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="true"/>
    </sqlMapGenerator>
    
    
    <!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 
        targetPackage/targetProject:同javaModelGenerator src/main/java
        type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
            1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
            2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
            3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
        注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
    -->
    <javaClientGenerator targetPackage="com.bdqn.mybatis2.dao" type="XMLMAPPER" targetProject="MyBatis2">
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="true"/>
       
    </javaClientGenerator>
    
    <!-- 选择一个table来生成相关文件,可以有一个或多个table,必须要有table元素
        选择的table会生成一下文件:
        1,SQL map文件
     -->
    <table tableName="day_user" >
        
        <!-- 参考 javaModelGenerator 的 constructorBased属性-->
        <property name="constructorBased" value="false"/>
        
        <!-- 默认为false,如果设置为true,在生成的SQL中,table名字不会加上catalog或schema; -->
        <property name="ignoreQualifiersAtRuntime" value="false"/>
        
        <!-- 参考 javaModelGenerator 的 immutable 属性 -->
        <property name="immutable" value="false"/>
        
        <!-- 指定是否只生成domain类,如果设置为true,只生成domain类,如果还配置了sqlMapGenerator,那么在mapper XML文件中,只生成resultMap元素 -->
        <property name="modelOnly" value="false"/>
        
        <!-- 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法,比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate -->
        <property name="useActualColumnNames" value="false"/>
        
    </table>
    
</context>

</generatorConfiguration>

  

在该配置文件右键,看到有小鸟图标的选项点击,等着生成。(没有小鸟选项,你的eclipse没有集成生成器插件);

猜你喜欢

转载自www.cnblogs.com/lslshuo/p/9119863.html