Spring Security
Published:
Published:
Published:
Published:
在 C/C++ 领域, 一直很困扰我的是它没有一个令我觉得很 “用户友好” 的 “编译/构建” 系统(很可能是有,只是我不知道而已)。 一般情况下,如果只是写一个 demo,我就直接命令行 gcc
编译了;如果是小工程,就手写一个 Makefile
编译了。
Published:
Reference:
- «深入理解 Java 虚拟机» 周志明著
- « JVM Specification Java SE 1.8 »
Published:
在并行编程当中,有两个基础的概念:进程(process)和线程(thread)。在Java当中,并行编程一般和线程有关,但是进程也是很重要的概念。
Published:
今天是boxing day的后一天(嗯,不是啥特殊节日,宝宝这两天啥都没买!),和一群宝宝们打了个火锅,火锅后谈起了这一年我们干了啥事。当时时间有限,想得比较快,不太全面。在我等洗澡水变热的时间里,我觉得应该好好地想想,遂作此文(这一句让我瞬间觉得13格高了起来)。
Published:
本文是作者的原创文章,转载请注明出处 from Eric_Lai
Published:
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文禁止所有留学中介转载,禁止用于任何商业场合,其他情况如需转载到任何公共区域,请先和我联系。
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
这几天一直都在做spring+mybaits的整合项目,但是其中遇到很多问题。所以现在开始重新学习一下spring,重最简单的开始,下面演示一个demo。
本次demo的工程目录如下:
注解:其中涂了红色的请忽略,是做其他作用的。包名为:justspring,下面有两个包分别是dao和service。dao用于模拟以后的数据库操作,service,顾名思义是服务层。 这两个包当中各有两个文件,一个是接口(interface)一个是接口的实现(interfaceImpl)。
//dao.java 文件名(下同)
package justspring.dao;
public interface Dao {
String sayHello();
}
//daoImpl.java
package justspring.dao;
public class DaoImpl implements Dao {
@Override
public String sayHello() {
return "hello by dao";
}
}
以上是dao层的代码,因为这是一个demo,所以每个文件只有一个方法用于示范。在真实的环境当中,dao层应该是和数据库打交道的,dao只提供接口而具体的实现可以通过mybatis的sql映射来实现,或者自己编写数据库的操作语句。在这里,因为是demo所以采用了后者,并且没有写数据库操作语句。
//service.java
package justspring.service;
public interface Service {
String sayHello();
String otherService();
}
//serviceImpl.java
package justspring.service;
import justspring.dao.Dao;
public class ServiceImpl implements Service {
private Dao dao;
public void setDao(Dao dao) {
this.dao = dao;
}
@Override
public String sayHello() {
return dao.sayHello();
}
@Override
public String otherService() {
return "other service";
}
}
服务,是用来承接控制层和数据层的,数据层取得的数据要在这里进行各种逻辑操作。将service细分为两小层:
服务接口层很简单,就是将提供的服务逐一的列出来,不管具体的实现。服务实现层,则是负责实现每一个服务,这样有利于后期的维护和升级。一般来说,我们从数据库查到的信息都是要拿来进行各种逻辑操作的,这个操作的场所正是服务实现层。所以,等下会在服务实现层里面由spring注入dao接口。既然如此为什么服务实现层不直接实现dao接口就好了呢?因为,真正的系统里面还会有一些不依靠数据库或者不同数据库的操作,所以其他服务需要在服务接口层进行声明。
在这里,最重要的就是这个serviceImpl了。它负责实现服务,我们可以看到这里面有一个Dao的对象,但是奇怪的是我们并没有给它new任何的实例。如果你对spring有一点了解的话就会知道,这里将会使用spring的依赖注入(Ioc)来实现了。后面的spring的配置文件里会有说明。
这里有两个方法,其中的sayHello方法是使用了dao的方法,otherService则可以想象成是一些不需要数据库的服务。
相信熟悉spring的都会知道,spring需要有一个配置文件,主要就是用来配置bean的。所以,这个文件很重要,随着spring的发展,越来越多简便的配置方法也出来了,很容易把人搞晕,我这次重新研究的重点就是想找到最简便最清晰的配置方法。但是,我还没研究出来,所以这里采用最原始的配置方法来演示。
//spring1.xml 这个名字大家可以随便起
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--创建一个一个名字(可以用name或者id来表示,唯一标识,不可重复)为dao的bean,class表示它的类(必须是类,不可以是接口或者抽象类)-->
<!--这个主要是用来等着被下面的bean使用的-->
<bean id="dao" class="justspring.dao.DaoImpl"/>
<!--创建一个名字为service,类型是ServiceImpl的bean,并且将这个bean注入到ServiceImpl.java的成员变量dao当中-->
<!--property 当中的name是成员变量的名字(需要保持一致),ref是指注入的是上面创建的bean-->
<bean id="service" class="justspring.service.ServiceImpl">
<property name="dao" ref="dao"/>
</bean>
</beans>
做到这里就基本是万事具备了,我们来测试一下是否真的成功了。为了不写main函数那套这里用了Junit4来进行,需要在maven下添加一下依赖包。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>testJustSpring</scope>
</dependency>
import justspring.service.Service;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class testJustSpring {
@Test
public void test() {
//引入spring的配置文件获取上下文
ApplicationContext context = new ClassPathXmlApplicationContext("spring1.xml");
//通过上下文和bean的名字获取service实例,就是刚才在配置文件下配置的第二个
//其实这里也可以通过依赖注入来实现,不过需要写setter代码不太好看
Service service = (Service) context.getBean("service");
String string = service.sayHello();
System.out.println(string);
}
}
通过上面的代码,我们可以得到的结果如下:
hello by dao
通过上面的配置,成功地得到了想要的结果。但是,如果bean很多的时候,我们都需要逐一的去配置就会显得非常的麻烦。spring团队也一直致力于简化.xml的配置步骤,这里简述一下如何使用注解来简化配置。
要想使用注解进行xml配置,需要在xml当中添加以下代码:
<context:annotation-config/>
<context:component-scan base-package="justspring.service,justspring.dao"/>
以上第一行是开启注解,第二行是扫描注解包。如果有第二行代码,第一行可以省略。
对于不同的层,spring提供了不同的注解。详细的情况如下所示:
- dao层使用 @Repository,可以在其后添加(““)来指定bean的名字(即name或者id)
- service层使用 @Service,可以在其后添加(““)来指定bean的名字(即name或者id)
- controller层使用 @Controller,可以在其后添加(““)来指定bean的名字(即name或者id)
- 其他情况下可以使用 @Component,可以在其后添加(““)来指定bean的名字(即name或者id)
注意,以上注解都是在接口的实现类进行。并且,如果没有指定名字,系统会默认起名,规则是:取类名,将第一个字母转换为小写。
使用以上的方法,我们可以完成将bean在xml的注册。但是,如果在某一类当中,我们需要使用bean时,怎么将xml当中的bean注入到类当中呢?这里要涉及到bean的自动装配策略。相关的注释主要有@Resource和@Autowired。这里不详细讲述他们的区别,需要看详细介绍了可以看这篇文章,本文使用@Resource进行。回到代码当中,将上面的代码做出如下的修改。
//DaoImpl.java
package justspring.dao;
import org.springframework.stereotype.Repository;
@Repository("dao") //添加了这行代码
public class DaoImpl implements Dao {
@Override
public String sayHello() {
return "hello by dao";
}
}
//ServiceImpl.java
package justspring.service;
import justspring.dao.Dao;
import javax.annotation.Resource;
//因为这个工程里有Service类,为了不发生歧义,使用包名+类名
@org.springframework.stereotype.Service("service")
public class ServiceImpl implements Service {
@Resource //添加了这个注释,将上面的dao注入到这里
private Dao dao;
@Override
public String sayHello() {
return dao.sayHello();
}
@Override
public String otherService() {
return "other service";
}
}
有了上面两个代码文件,我们的xml就解放出来了。不需要再进行任何的bean注册了,现在的xml应该如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<context:component-scan base-package="justspring.service,justspring.dao"/>
</beans>
xml文件一下子干净了很多,省掉了配置的麻烦。测试类的代码不作任何的变化,运行后可以得到与之前一样的结果。测试类当中的service还是要通过getBean来实现的,我尝试着用@Resource像注入dao那样的方法来做,但是并没有能够成功。报错空指针,这里接下来还需要认真的研究一下。
前面已经得到了一个完整的spring工程,但是dao部分关于数据库的还没有实现,下面来完成怎么连接数据库,并且从数据库里面获取到数据的操作。首先需要在maven下添加需要的依赖包,这里不一一列举了,可以参看我这个系列的第一篇文章。
Mybatis,是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
Mybatis有一个中文的说明文档,需要可以点击这里查看
由于我们是在spring的框架下使用mybait,所以除了配置mybatis外,还需要将它和spring框架结合在一起。方便的是,已经存在无缝连接它们的库了,那就是Mybaits-Spring。
Mybatis-Spring有一个中文的说明文档,需要可以点击这里查看
注意,中文版不够详细,有能力还是请阅读英文版
通过这个文档,总结一下使用的方法。
使用整个模块前需要引入必要的jar包,或者添加依赖文件. 如果使用的是maven,在pom.xml当中添加如下:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>x.x.x</version>
</dependency>
要和spring一起使用mybatis,需要在spring的上下文当中定义至少两样东西。分别是:
其中,第一点很容易配置,先把它干掉。直接在spring的上下文配置就可以了,注意,整合后,不需要单独的mybatis配置文件,全部的配置内容都可以在spring的上下文当中进行。
//spring1.xml 在上面已有的基础上添加
//数据源配置,需要根据个人情况填写
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/数据库名" />
<property name="username" value="用户名" />
<property name="password" value="密码" />
</bean>
//SqlSessionFactory配置,注意此处有大坑(如果你使用Intellij这个ide的话请看后面的填坑指南)
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
注意:上面的的文件不能照着填,需要将路径理清楚,如果你自己在尝试着写的话,请把路径换成你自己的。这里使用的是mysql数据库,如果不是请按照实际情况填写。Intellij编译工程的时候,会按照目录的种类进行编译,xml文件在src的源码目录下的话不会编译到target里面,需要单独进行设置。
配置数据映射器的方法有很多,先简要的叙述一下:
官方说明文档在这里(这里不要去看中文的翻译版,不单止内容缺少,而且讲得非常不清楚)
总结一下来说就是两种方法:
- 利用xml来进行显示的逐一配置(如果mapper很多的话就会很麻烦)
- 利用mybatis-spring提供的自动扫描机制(就像spring当中扫描dao和service组件那样)
有简单的方法使用,相信没有人希望用难的方法,所以这里使用上述的第二种方法进行,在spring1.xml(即spring的配置文件)当中添加几句代码可以:
//spring1.xml 现在我的spring1.xml看起来是这样的
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring.xsd">
//添加了这一句和多引用了一个命名空间,请和上面的文件对比着看
<mybatis:scan base-package="justspring.dao" />
...省略相同的代码
</beans>
配置方面现在就都做好了,需要添加一些数据库的操作代码(写在xml配置文件上),另外在dao和service提供一些接口并实现它。在dao真正操作数据库的时候不需要我们自己写实现类,按照上面的配置,保证xml的名字和接口类的名字对应一致,框架会替我们做好实现。要实现操作数据库,首先要有数据表,我们这里建了一个用来测试,如下:
括号表示存在表里的数据
表名:person
字段1:LOG_NM(”管理员0”)
字段2:LOG_PW(”123456”)
//Dao.java
package justspring.dao;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Repository //没有实现类DaoImpl,所以将这个注解放在了这里
public interface Dao {
// @Select("SELECT LOG_PW FROM person WHERE LOG_NM = #{name}")
//通过@Select注释也可以不用写xml直接进行数据库操作,但是在比较复杂的查询情况下还是需要xml的(官方的说法),所以这里还是使用xml的方法
String getPwByUserNm(@Param("name")String name);
//@Param是一个注解,表示传进去的参数名字,在xml当中通过@Param括号里面的名字,可以获取到传进去的参数
}
//Service.java
package justspring.service;
public interface Service {
String getPwByUserNm(String name);
}
//ServciceImpl.java
package justspring.service;
import justspring.dao.Dao;
import org.apache.ibatis.annotations.Param;
import javax.annotation.Resource;
@org.springframework.stereotype.Service("service")
public class ServiceImpl implements Service {
//同上,注入一个dao
@Resource
private Dao dao;
//实现通过用户名获取密码的服务
@Override
public String getPwByUserNm(String name) {
return this.dao.getPwByUserNm(name);
}
}
//Dao.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="justspring.dao.Dao">
<select id="getPwByUserNm" resultType="java.lang.String">
SELECT LOG_PW FROM person WHERE LOG_NM = #{name}
</select>
</mapper>
//testJustSpring.java
package justspring.test;
import justspring.service.Service;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.annotation.Resource;
public class testJustSpring {
@Test
public void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("spring1.xml");
Service service = (Service) context.getBean("service");
String name = "管理员0";
String password = service.getPwByUserNm(name);
System.out.println(password);
}
}
以上,代码已经完全展示出来。但是前面说的大坑还没有解决,为解决它先看一下正确的文件结构应该这样设置:
请将文件结构调整如上!
请将文件结构调整如上!
请将文件结构调整如上!
重要的事情说三遍,test的包可以不调整,没有影响。并且点击工程根目录,按下F12打开模块设置,将resources目录设置为resources root类型,点击apply。重新编译一次,应该就能够在.targe下看到Dao.xml文件了。详情请看这里,非常感谢解决方案。
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric Lai
最近实习了,很多东西要学没有太多的时间来更新。公司用的大框架是SpringMVC+myBatis,这段时间一直在扒这个框架。今天终于做完了一个demo记录一下以备查阅。
建立工程也是一个技巧活,下面先来配置一下工程的文件架构。
首先你需要准备一个数据库和表,这里不赘述这部分操作。我的表(表名student,数据库名test)如下所示:
为了方便进行各种依赖关系的管理,整个工程用Maven来进行管理,它的配置文件是pom.xml。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>myBatisDemo</groupId>
<artifactId>myBatisDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<!-- 项目的文件的格式编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- spring版本号 -->
<spring.version>4.2.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!--spring支持包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!--mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!--mybatis-spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 映入JSON -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<!-- 自动生成实体类、dao、Mapper的插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
</project>
所有需要用到的依赖包都下载之后,接下来是配置myBatis。核心配置文件是Configuration.xml(主要用于构建SqlSessionFactory)。我的配置如下:
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 按照你选择的数据库来添加,我用的是MySql -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- 你的数据库地址 -->
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<!-- 数据库访问用户名 -->
<property name="username" value="root"/>
<!-- 数据库访问密码,我这里是空 -->
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ericlai/myBatisDemo/mapper/StudentMapper.xml"/>
</mappers>
</configuration>
下面,对这个配置文件进行一下详细解释:
<properties resource="com/myBatisDemo/*.properties"(引入需要读取值文件)>
...
<property name="driver" value="${driver}">
<property name="url" value="${url}">
...
</properties>
UNPOOLED
,POLLED
,JNDI
(这里我使用的时数据库连接池,第一种是不适用连接池,第三种是为了在EJB或者应用服务器当中使用放置一个上下文);注:还有这里没有用到的settings,typeAliases、typeHandlers、objectFactoryplugins没有详解,想要更深层次的了解可以点击这里。
我们访问数据库的时候需要写sql语句、封装数据的实体类、dao和Mapper文件等,过程比较漫长的枯燥。myBatis有插件可以自动生成这些代码,下面将演示如何实现这个功能:
<?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>
<!--导入属性配置
注意genertaorConfig.propeties需要在于此文件同一目录下-->
<properties
resource="genertaorConfig.propeties"></properties>
<!--指定特定数据库的jdbc驱动jar包的位置 -->
<classPathEntry
location="C:\Users\Administrator\.m2\repository\mysql\mysql-connector-java\5.1.30\mysql-connector-java-5.1.30.jar" />
<context id="MySQLTables" targetRuntime="MyBatis3">
<!--jdbc的数据库连接 -->
<jdbcConnection driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.connectionURL}" userId="${jdbc.userId}"
password="${jdbc.password}">
</jdbcConnection>
<!-- false:JDBC DECIMAL、NUMERIC类型解析为Integer,默认方式 -->
<!-- true: JDBC DECIMAL、NUMERIC类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--生成的model 包路径 -->
<javaModelGenerator targetPackage="${model.package}"
targetProject="${target.project}">
<property name="enableSubPackages" value="ture" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
<sqlMapGenerator targetPackage="${xml.mapper.package}"
targetProject="${target.project}">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成的Dao接口 的包路径 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="${dao.package}" targetProject="${target.project}">
<property name="enableSubPackages" value="ture" />
</javaClientGenerator>
<!--用到的数据库表名 -->
<table tableName="student"></table>
</context>
</generatorConfiguration>
jdbc.driverLocation=C:\Users\Administrator\.m2\repository\mysql\mysql-connector-java\5.1.30\mysql-connector-java-5.1.30.jar
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/test
jdbc.userId=root
jdbc.password=
model.package=com.ericlai.myBatisDemo.model
dao.package=com.ericlai.myBatisDemo.dao
xml.mapper.package=com.ericlai.myBatisDemo.mapper
target.project=src
做完上述操作之后,我们就可以使用自动生成工具来进行相应文件的生成了。因为这个工具是一个Maven插件,所以我们需要在IDE当中点击Run傍边的箭头图标选择run congiguration然后添加一个Maven的运行项(我命名为mybatis-generator),命令是mybatis-generator:generate -e -X
这里的两个参数,-e是显示错误信息,-X是显示详细的debug信息。
现在点击一下Run——>mybatis-generator,就可以自动生成对应的文件了。
下面,做一个测试类来试验下以上的配置是否成功。新建一个Test类装在Test包下放在src的目录下,代码如下:
package com.ericlai.myBatisDemo.test;
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;
import com.ericlai.myBatisDemo.dao.StudentMapper;
import com.ericlai.myBatisDemo.model.Student;
public class Test {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getRecourseAsReader("Configuration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession();
try {
StudentMapper mapper = session.getMapper(StudentMapper.class);
Student student = mapper.selectByPrimaryKey(2);
System.out.println(student.getName());
System.out.println(student.getId());
} finally {
session.close();
}
}
}
运行后,可以得到结果如下:
李四 2
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
前几天去亲戚家玩耍,发现小伙伴在给他父亲的公司开送货单。用的是先在execl上做好然后复制到word上排好版,再打印出来。我看着他操纵觉得有点麻烦,萌生了要不要“造个轮子”的想法。虽然“造轮子”是一个很愚蠢的方法,造的时间都可以用上述的方法开几十上百张单了。但是本着做中学的想法,我用了两天时间在家闭门造轮。时间有点长了,大神们勿喷。囧…
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
ListView是用来展示大量数据的,所有我们首先要有数据,其次数组里面的数据不能够直接地传递给控件,需要使用配适器。下面看一个简单的例子:
Published:
以下内容是学习android的过程的记录,部分是自己的理解,部分来自与网络,部分来自于书籍《第一行代码》。欢迎转载,请注明出处。
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai
Published:
本文是作者原创文章,欢迎转载,请注明出处 from:@Eric_Lai