说来惭愧,java编程近十年——事业单位,自己科研小打小闹,一直没正规的学习框架使用,也没整过maven项目管理,在这新型肺炎冠状病毒肆虐的春节假期,每天睡到10点+起床,三顿并作两顿,陪老婆孩子,刷手机看电视,无聊之际,折腾下新的开发环境(myeclipse2014换为2018),发现新建的项目默认全部变成了maven项目,深感落后时代了,故就此开始学习新的知识:
1、maven安装:因myeclipse自带maven版本较低,因此自行下载安装最新版。这个简单,下载后解压到想放的目录(目录不可有中文,最好也不包含空格)即可。
2、maven配置:1)配置环境变量path增加:%MAVEN_HOME%\bin;2)因maven依赖java环境,环境变量中也需要配置好JAVA_HOME变量;3)修改本地仓库目录,默认仓库位置在C盘,很不好找,为了方便,并防止重装系统丢失,可在%MAVEN_HOME%\config\setting.xml中修改默认仓库路径,如图1所示:
图1、maven本地仓库默认路径参数
3、myeclipse配置:菜单Window-->Preferences,展开Maven,选择Installations,点击add,选择maven安装目录,应用后,点击setting,选择maven配置参数文件setting.xml,如图2、图3所示,分别点击apply后,就完成
图2、myeclipse2018中安装maven
图3、myeclipse2018中配置Maven参数文件
4、mybatis generator插件安装:mybatis generator可用于自动生成mybatis持久层框架中的MAPPER及其实现类和POJO。在myeclipse菜单选择Help-->Install from Catolog...,搜索mybatis,点击Install,等待完成即可,如图4所示
图4、mybatis generator插件安装
至此,三个开发环境基本上配置完成,下面我们创建第一个myeclipse环境下针对oracle数据库采用mybatis框架的Maven项目,主要包括项目的创建,maven项目参数的配置,oracle驱动导入本地仓库,mybatis generator参数设置,测试程序:
1、项目创建:如图5创建maven项目,勾选create a simple...,选择项目存放路径,如图6所示,点击Next,在弹框中填写artifact id(即为项目名),group id,如图7所示,然后点击finish。
图5、项目创建1
图6、项目创建2
图7、项目创建3
2、添加mybatis generator框架:右击项目文件夹,快捷菜单中new-->other... ,搜索Mybatis,双击Mybatis generator...,设置generatorConfig.xml存储到项目src/main/resouces目录,自动生成generatorConfig.xml模板,但少一项参数(小bug),下面是我的参数配置:
<?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="datasource.properties"/>
<!-- 指定数据库驱动的jdbc驱动jar包的位置
<classPathEntry location="${db.driverLocation}" />-->
<!-- context 是逆向工程的主要配置信息 -->
<!-- id:起个名字 -->
<!-- targetRuntime:设置生成的文件适用于那个 mybatis 版本 -->
<context id="context1" targetRuntime="MyBatis3">
<!--optional,旨在创建class时,对注释进行控制-->
<commentGenerator>
<property name="suppressDate" value="true" />
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<jdbcConnection connectionURL="${db.url}" driverClass="${db.driverClassName}" password="${db.password}" userId="${db.username}" />
<!--非必须,类型处理器,在数据库类型和java类型之间的转换控制-->
<javaTypeResolver>
<!-- 默认情况下数据库中的 decimal,bigInt 在 Java 对应是 sql 下的 BigDecimal 类 -->
<!-- 不是 double 和 long 类型 -->
<!-- 使用常用的基本类型代替 sql 包下的引用类型 -->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetPackage:生成的实体类所在的包 -->
<!-- targetProject:生成的实体类所在的硬盘位置 -->
<javaModelGenerator targetPackage="com.dataobject" targetProject="mbd/src/main/java">
<!-- 是否允许子包 -->
<property name="enableSubPackages" value="false" />
<!-- 是否对modal添加构造函数 -->
<property name="constructorBased" value="true" />
<!-- 是否清理从数据库中查询出的字符串左右两边的空白字符 -->
<property name="trimStrings" value="true" />
<!-- 建立modal对象是否不可改变 即生成的modal对象不会有setter方法,只有构造方法 -->
<property name="immutable" value="false" />
</javaModelGenerator>
<!-- targetPackage 和 targetProject:生成的 mapper 文件的包和位置 -->
<sqlMapGenerator targetPackage="com.dao" targetProject="mbd/src/main/java">
<!-- 针对数据库的一个配置,是否把 schema 作为字包名 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage 和 targetProject:生成的 interface 文件的包和位置 -->
<javaClientGenerator targetPackage="com.dao" targetProject="mbd/src/main/java" type="ANNOTATEDMAPPER" >
<!-- 针对 oracle 数据库的一个配置,是否把 schema 作为字包名 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<table schema="qzdata" tableName="qz_312_dys_01">
<!-- columnOverride column="???" property="???" /> -->
</table>
<table schema="qzdata" tableName="qz_312_dyu_01">
<!-- columnOverride column="???" property="???" /> -->
</table>
</context>
<!-- mappers>
<mapper resource="com/dao/Qz312Dys01Mapper.xml"/>
<mapper class="cn.dao.dao.Qz312Dys01Mapper"/>
</mappers> -->
</generatorConfiguration>
并在同路径下建数据库属性文件datasource.properties:
db.driverLocation=E:/mavenjar/ojdbc6.jar
db.driverClassName=oracle.jdbc.driver.OracleDriver
db.url=jdbc:oracle:thin:@{ip address}:1521:{service name}
db.username=??
db.password=??
3、配置项目依赖包和插件:依赖包有:mybatis,mybatis generator和oracle驱动;插件包括mybatis generator。将下面的配置信息粘贴到项目pom.xml文件中,maven系统会自动寻找相应的包和插件,若本地库没有,联网情况下,会自动从maven中央库下载。注意:oracle驱动无法自动下载,需要手动导入到本地库。
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
<type>maven-plugin</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
</dependency>
</dependencies>
</dependencyManagement>
4、oracle驱动的手动导入本地库:首先驱动版本不能太低,至少11.2版本(驱动包下载),或更新的,否则项目运行是会报错。打开命令提示符窗口,当前路径切换到maven的安装目录/bin下,运行命令行:mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar -Dfile=D:\download\ojdbc6.jar,注意驱动jar包的路径、版本号不要填错。
5、配置mybatis参数文件(sqlConfig.xml):若不配置,程序无法访问数据库,本尊以为配置了mybatis generator的参数文件就行了,折腾了一整天,才找到是这个原因。
<?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>
<properties resource="datasource.properties"/>
<settings>
<!--全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载,默认值为false-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。默认值为true-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<!-- 其实就是将bean的替换成一个短的名字-->
<!-- typeAliases>
<typeAlias type="com.demo.mybatis.pojo.User" alias="User"/>
</typeAliases>-->
<!--对事务的管理和连接池的配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED"><!--POOLED:使用Mybatis自带的数据库连接池来管理数据库连接-->
<property name="driver" value="${db.driverClassName}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<!--mapping文件路径配置-->
<mappers>
<!--<mapper resource="mapper/UserMapper.xml"/>-->
<mapper class="com.dao.Qz312Dyu01Mapper"/>
<!--<package name="com.demo.mybatis.mapper"/>-->
<!--<mapper url=""/>-->
</mappers>
</configuration>
5、生成mybatis框架的持久层程序:右键点击generatorConfig.xml,快捷菜单中选择Run as-->Run Mybatis generator,自动生成包括mapper、接口实现类、pojo等类。
6、数据库访问session工具类:
package com.util.batis;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtil {
public MybatisUtil() {
// TODO Auto-generated constructor stub
}
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("sqlConfig.xml");
SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();
sqlSessionFactory = ssfb.build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
7、测试类:右键run as-->maven clean,maven build,然后java application
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.ibatis.session.SqlSession;
import com.dao.Qz312Dyu01Mapper;
import com.dataobject.Qz312Dyu01;
import com.dataobject.Qz312Dyu01Key;
import com.util.batis.MybatisUtil;
public class TestFirst {
public TestFirst() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SqlSession session = MybatisUtil.getSession();
//推荐使用的方法
Qz312Dyu01Mapper userDao = session.getMapper(Qz312Dyu01Mapper.class);
Date dt=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
dt=sdf.parse("2018-12-10");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String stationid="34008",pointid="2",itemid="3127";
Qz312Dyu01Key key=new Qz312Dyu01Key(dt, stationid, pointid, itemid);
Qz312Dyu01 user = userDao.selectByPrimaryKey(key);
System.out.println(user.getObsvalue());
}
}
至此,终于完成基本测试项目的全部工作,成功运行。
本文为本人看这idea+mybatis+maven+mysql的视频学习,凭着碰到问题解决问题的顽强战斗精神,经连续三天,熬红了双眼,磕磕碰碰,折腾出myeclipse+mybatis+mybatis generator+maven+oracle,谨以此献给学习路上的后来人。