ssm框架学习01--mybatis学习
2016-05-14 17:45
405 查看
准备工作:mybatis的jar包,数据库的驱动包,日志log4j和单元测试的包
开发模式:(1)基于原始dao开发,需要编写dao接口和dao接口的实现类
(2)基于mapper开发,只需编写dao接口,但是需要遵守一定规范(映射文件的命名空间为dao接口全限定名,接口中的方法,参数类型和返回类型和映射文件中statement语句输入参数和输出参数相对应,注意返回结果为集合比较特殊)
工程结构如下:
两种方式我都写了,所以这里会有连个xml映射文件,并且会有dao和mapper的包,实际开发选择其中一种(推荐mapper)
首先这里给出db.properties和log4j.properties这两个文件
db.properties
sqlmapconfig.xml主要放mybatis的配置文件如下,主要包括二个部分,第一部分为配置数据源,第二部分为映射文件配置
user.xml
UserDao.java
UserMapper.java
mapper方式的测试:
dao方式的测试类似,只需要把sessionFactory传给dao的构造方法的参数就可以获取sqlsession了
User.java
首先需要准备jar包,然后编写一个配置文件generator.xml,这里使用一个方法执行它对应文件如下:
generator.xml
开发模式:(1)基于原始dao开发,需要编写dao接口和dao接口的实现类
(2)基于mapper开发,只需编写dao接口,但是需要遵守一定规范(映射文件的命名空间为dao接口全限定名,接口中的方法,参数类型和返回类型和映射文件中statement语句输入参数和输出参数相对应,注意返回结果为集合比较特殊)
工程结构如下:
两种方式我都写了,所以这里会有连个xml映射文件,并且会有dao和mapper的包,实际开发选择其中一种(推荐mapper)
首先这里给出db.properties和log4j.properties这两个文件
db.properties
jdbc.driver =com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=adminlog4j.properties
# Global logging configuration #\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u65e5\u5fd7\u7ea7\u522b\u8981\u8bbe\u7f6e\u6210DEBUG\uff0c\u751f\u4ea7\u73af\u5883\u8bbe\u7f6e\u6210info\u6216error log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n这里需要注意一下,在我们开发过程,要使用debug模式
sqlmapconfig.xml主要放mybatis的配置文件如下,主要包括二个部分,第一部分为配置数据源,第二部分为映射文件配置
<?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="db.properties"> <!-- 这中间还可以配置一些其他的属性,加载时先加载然后再加载外部的配置 --> </properties> <!-- 配置数据库环境 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="sqlmap/User.xml"/> <mapper resource="sqlmap/UserMapper.xml"/> <!-- 使用批量导入的方式,需要注意使用mapper代理,并且xml文件和mapper接口放在同一目录中--> </mappers> </configuration>接下来是映射文件,user.xml和usermapper.xml两者的区别仅仅在于命名空间的不同
user.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代理方式很重要 --> <mapper namespace="test"> <select id="selectUserById" parameterType="int" resultType="com.zcj.po.User"> select * from userinfo where id=#{id} </select> </mapper>usermapper.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代理方式很重要 --> <mapper namespace="com.zcj.mapper.UserMapper"> <select id="selectUserById" parameterType="int" resultType="com.zcj.po.User"> select * from userinfo where id=#{id} </select> </mapper>接下来就是dao实现方式
UserDao.java
package com.zcj.dao; import com.zcj.po.User; public interface UserDao { public User selectUserById(int id); }UserDaoImpl.java
package com.zcj.dao; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import com.zcj.po.User; public class UserDaoImp implements UserDao { private SqlSessionFactory sqlSessionFactory; public UserDaoImp(SqlSessionFactory sqlSessionFactory){ this.sqlSessionFactory=sqlSessionFactory; } public User selectUserById(int id) { // TODO Auto-generated method stub SqlSession sqlSession= sqlSessionFactory.openSession(); User user = sqlSession.selectOne("test.selectUserById",id); return user; } }第二种方式,使用mapper,方法的编写就要受到一定的限制
UserMapper.java
package com.zcj.mapper; import com.zcj.po.User; public interface UserMapper { public User selectUserById(int id); }到这一步就编写完了,下面是单元测试,都需要首先得到SqlsessionFactory
mapper方式的测试:
package com.zcj.mapper; import java.io.InputStream; 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 org.junit.Before; import org.junit.Test; import com.zcj.po.User; public class UserMapperTest { private SqlSessionFactory sqlSessionFactory; @Before public void setUp() throws Exception { String resource ="mybatis/SqlMapConfig.xml"; InputStream inputStream =Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testSelectUserById() { SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user=userMapper.selectUserById(1); System.out.println(user); } }
dao方式的测试类似,只需要把sessionFactory传给dao的构造方法的参数就可以获取sqlsession了
package com.zcj.dao; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import com.zcj.po.User; public class UserDaoImpTest { private SqlSessionFactory sqlSessionFactory; @Before public void setUp() throws Exception { String resource ="mybatis/SqlMapConfig.xml"; InputStream inputStream =Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testSelectUserById() { UserDaoImp userDaoImp = new UserDaoImp(sqlSessionFactory); User user=userDaoImp.selectUserById(1); System.out.println(user); } }最后加上user的pojo
User.java
package com.zcj.po; public class User { private int id; private String username; private String password; private String sex; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "User [id=" + id + ", password=" + password + ", sex=" + sex + ", username=" + username + "]"; } }学习到这里,mybatis的单独使用就大致了解了,下面介绍mybatis generator,它是依据数据表自动生成pojo,mapper,和映射文件
首先需要准备jar包,然后编写一个配置文件generator.xml,这里使用一个方法执行它对应文件如下:
generator.xml
<?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> <context id="testTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root" password="admin"> </jdbcConnection> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO类的位置 --> <javaModelGenerator targetPackage="com.zcj.ssm.po" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="com.zcj.ssm.mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.zcj.ssm.mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定数据库表 --> <table tableName="userinfo" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> <!-- <table schema="" tableName="sys_user"></table> <table schema="" tableName="sys_role"></table> <table schema="" tableName="sys_permission"></table> <table schema="" tableName="sys_user_role"></table> <table schema="" tableName="sys_role_permission"></table> --> <!-- 有些表的字段需要指定java类型 <table schema="" tableName=""> <columnOverride column="" javaType="" /> </table> --> </context> </generatorConfiguration>对应的执行文件:
import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.exception.XMLParserException; import org.mybatis.generator.internal.DefaultShellCallback; public class GeneratorSqlmap { public void generator() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; // File configFile = new File("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); } public static void main(String[] args) throws Exception { try { GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap(); generatorSqlmap.generator(); } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- DEDECMS之三 首页、列表页怎么调用文章内容
- 机器人学 —— 机器人视觉(Bundle Adjustment)
- JS控制图片显示的大小(图片等比例缩放)
- web遮罩实现案例
- Alignment of Code(hdu)
- C# ToString() 格式化大全
- C++拷贝构造函数(深拷贝,浅拷贝)
- Unity3d制作Loading场景进度条
- linux 文件删除过程浅析
- 第十二周项目 阅读程序 c
- DNS中的正向解析与反向解析
- Jxls导出excel的若干方式总结(六)-- 分sheet导出查询记录,每条记录一个sheet
- linux svn搭建仓库
- 腾讯云在线直播三
- 大牛被公司诬蔑,还要进派出所?
- 开源jxls - java导Excel(多sheet) - 模板文件定义类似jsp的el表达式
- vs增加第三方依赖库的方法总结
- JVM--堆的新年代和老年代
- request_region
- 软考二进宫-总结知识点3