学习框架工具的最好,也是最快的方法就是通过实例来学习,本实例使用spring和mybatis构建了一个java小程序,该程序没有什么实际的业务功能,只是通过mybatis简单读取数据库的数据。
一、构建数据库
使用navicat工具连接数据库后,创建user表如下:
关于数据库表的创建一般要做以下几点:
- 设定类型:一般常用的类型就是bigint,对应于java中较长的整型如long;varchar,用于储存字符串;int 对应java中的integer。
- 字段的长度:指的是字符长度,并不是计算机储存数据使用的位的长度,如root字段长度为1,则该字段可以填的值为0到9,这些一位数。创建表时字段需要多大就给多长。
- 字段的其他设置:在页面的下方,截图上没有;包括字段的注释(描述字段的作用),整型字段要不要设置为无符号(如果该字段没有负值的话就添上),默认值(varchar类型的默认值需要用单引号括起来)
- 外键:用于关联多张表的字段,如另张成绩表上还有一个字段user_id,该字段的值全部来源于user表上的id字段,就可以在成绩表上添加外键,关联user表上的id字段;
- 表注释:表的注释,描述表的用途,虽然表名能描述出表的用途,但是如果后面业务逻辑变复杂,表变得多起来,添上注释还是有点好处的,也便于维护。
其他的设置就和实际的业务有关了;
二、创建maven项目
使用eclipse右击new - project,选择maven project,选择项目路径,项目类型选择,uqickstart结尾,填写groupid组名,artifactid项目名,finish即可。
创建maven项目的好处就是不用自己去找jar包,把要用到的jar包写在配置文件中即可,项目会自动引入。创建好的项目后分包如下:
- bean:存放所有bean文件,数据库中查询到的结果要转换成java对象;
- config:存放所有的spring,mybatis的配置文件;
- dao:存放mybatis连接数据库要用到的mapper类;相当于存放sql语句的地方;
- mappers:存放mybatis的xml文件,和dao中的文件相对应。
- util:自定义的工具类;
三、配置文件
使用框架工具最麻烦的就是配置文件了,不过配置文件也是大同小异,可以根据自己的需要在别人的配置文件上进行修改,配置文件写好后,业务逻辑的代码就会变得特别简单。
1. maven的pom文件
maven的pom文件就是配置要用到的所有jar包的地方,文件内容如下:
4.0.0
com.yesongdh
springInstance
0.0.1-SNAPSHOT
jar
springInstance
http://maven.apache.org
UTF-8
1.7.25
4.3.12.RELEASE
2.8.2
3.4.5
1.3.1
junit
junit
3.8.1
test
com.alibaba
druid
1.1.3
mysql
mysql-connector-java
5.1.44
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
${mybatis.spring.version}
org.springframework
spring-test
${springmvc.version}
org.springframework
spring-core
${springmvc.version}
org.springframework
spring-oxm
${springmvc.version}
org.springframework
spring-tx
${springmvc.version}
org.springframework
spring-jdbc
${springmvc.version}
org.springframework
spring-aop
${springmvc.version}
org.springframework
spring-context
${springmvc.version}
org.springframework
spring-context-support
${springmvc.version}
org.springframework
spring-expression
${springmvc.version}
org.springframework
spring-orm
${springmvc.version}
org.apache.maven
maven-model
2.0.2
org.apache.maven.plugins
maven-compiler-plugin
1.7
主要引入了druid数据库连接池、mysql数据库的jdbc驱动、mybatis数据库持久化框架、spring框架包;最后一个是jdk插件,每次建完项目后,项目使用的jdk包都是1.5的,只有在pom文件中添加这一段配置后项目才会使用jdk1.7或者更新的jdk版本。
选中项目右击,选择maven - update project,把项目刷新一下
2. 配置spring和mybatis框架文件
在config文件夹下创建如下两个文件:jdbc.property和mybatis.xml
jdbcs.properties主要是数据库连接的相关设置,内容如下:
# MySQL
#============================================================================
#test MySQL
jdbc.mysql.driver = com.mysql.jdbc.Driver
jdbc.mysql.url = jdbc:mysql://localhost:3306/test?useSSL=true
jdbc.mysql.username = root
jdbc.mysql.password = SQL1137660
#mybatis config
#============================================================================
jdbc.initialSize = 10
jdbc.minIdle = 10
jdbc.maxActive = 10
jdbc.testWhileIdle = true
jdbc.timeBetweenEvictionRunsMillis = 30000
jdbc.minEvictableIdleTimeMillis = 60000
jdbc.validationQuery = SELECT 'x'
jdbc.testOnBorrow = false
jdbc.testOnReturn = false
jdbc.poolPreparedStatements = true
jdbc.maxOpenPreparedStatements = 100
mybatis.xml文件内容如下:
mybatis.xml主要是设置数据库的数据源、引入所有mybatis 的dao文件和xml文件、使用spring事务管理。
四、业务代码
1. 创建bean文件和dao文件
- 在bean文件夹下创建user.java;内容如下:
public class User {
private String id;
private String name;
private int sex;
private String phone;
private String email;
private int root;
private String password;
后半部分全是字段的get/set方法,还有改写的tostring方法用于观察最后的打印结构,就不贴出来了。
关于bean类要注意:
bean类所有字段的名称一定要和查询语句的字段名对应;如:select user_id, name from score; 选取了数据库score表的user_id和name字段,这些字段都要填充到user.java类中,那user.java中的字段名必须为user_id和name,不然最后得到的user对象的id字段肯定为空。或者更改sql语句为select user_id as id, name from score;给数据库字段别名。框架可能使用了反射,读取了java对象的所有字段名,根据字段名和数据库的查询结果字段名一一对应,最后通过get和set方法个java对象的字段赋值。
- 在dao文件夹下创建dao文件,文件类型为接口,UserMapper.java,内容如下:
@MapperScan
public interface UserMapper {
@Select("select id, name, sex, phone, email, root, password from user")
List getUsers();
}
注意那个@mapperscan注解和@select注解,mybatis就是扫描那两个注解把文件扫描进springcontext中的。查询结果如果不止一个的话就需要用list,如果只有一个那就填User类型。
其实所有的sql语句也可以写在mappers包的xml中,和dao包这个的类进行关联。如果要对sql语句的复用的话可能就需要把sql语句写在xml文件中比较好,不过我更倾向于写在dao文件中,写代码的时候就可以少打开一个窗口,更方便。
- 在mappers目录创建UserMapper.xml文件,内容如下:
sql语句可以写在这里,和dao包中的文件通过这里的namespace联系起来,dao包中只提供接口方法,这里提供sql;不过也可以像我一样通过注解的方式,把sql语句写在dao包里,这里就可以什么都不用写。在修改时就不用同时打开三个文件了。
2. App业务代码
app中的代码如下:
public class App
{
public static void main( String[] args )
{
ApplicationContext context = new ClassPathXmlApplicationContext("config/mybatis.xml");
UserMapper userMapper = context.getBean(UserMapper.class);
List users = userMapper.getUsers();
System.out.println(users);
}
}
打印结果如下:
五、打包成可执行文件
java引用程序可以被打包成可执行 jar 文件,eclipse右击选择export,选择 runnable JAR file,在launch config 中选择包含main方法的类,下面是三种对于引用的库的处理方式:把需要的jar包都抽取到生成的jar文件中,打包所有需要的库文件到生成的jar文件中,复制需要的库文件到子目录中;这里选择最后一个;然后finish就可以了。
jar文件所在位置,shift + 右击运行power shell,输入 java -jar ./springInstance.jar,运行结果如下,和eclipse的运行结果相同:
六、总结
整理一下整个程序的逻辑流程:
在主程序中ClassPathXmlApplicationContext("config/mybatis.xml");读取spring的配置文件,配置文件主要做了三件事:
- 使用com.alibaba.druid.pool.DruidDataSource建立线程池数据源;
- mybatis 扫描mappers文件夹下的mapper.xml文件和dao包下的dao文件,将扫描到的文件加入到spring配置文件中;
- 事务管理器和事务注解管理;其实还可以加入一些从程序一开始就需要运行的初始化程序。
最后主程序从applicationContext中获取dao包中的初始化好的实例,调用dao方法。
个人理解spring是另一种写代码的风格,用配置文件的方式来实例化对象,所有配置文件中的类都可以在applicationContext中找到,很方便。spring和mybatis的配合,mybatis通过扫描注解和文件的方式,把所有的数据库连接对象都添加到spring中进行实例化,在编写业务代码时就可以直接在applicationContex对象中获取,有效地减少了业务代码量。
源码下载:https://pan.baidu.com/s/1fYTIzsT6xpmyjsNZCvlwfg
如果有不对的地方欢迎指正讨论