摘录自:http://blog.csdn.net/y172158950/article/details/16979391

新的项目中用到mybatis,虽然不用自己写ORM的代码,但是借这个机会,学习一下。

本章目标:如题,helloWorld。

方法:在CSDN上下载一个demo,简单修改,能跑起来就OK。

1. 环境

a)用到的jar:mybatis-3.0.5.jar ,MySQL-connector-java-5.0.8-bin.jar (只有一个jar,是不是很简单)

b)mysql

c)demo下载路径:http://download.csdn.net/detail/lihonghua168/3579586#comment

2.demo代码目录:

a)configuration.xml :mysql连接配置;基本就2块,一个是数据库连接配置,二是映射实体,相关映射文件。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <typeAliases>
  5. <!-- 映射的实体 -->
  6. <typeAlias type="com.test.Goods"/>
  7. </typeAliases>
  8. <environments default="development">
  9. <environment id="development">
  10. <transactionManager type="JDBC"></transactionManager>
  11. <dataSource type="POOLED">
  12. <property name="driver"
  13. value="com.mysql.jdbc.Driver" />
  14. <property name="url"
  15. value="jdbc:mysql://127.0.0.1:3306/test" />
  16. <property name="username" value="root" />
  17. <property name="password" value="root" />
  18. </dataSource>
  19. </environment>
  20. </environments>
  21. <mappers>
  22. <!-- 数据连接成功后执行的对应实体映射文件数据库语句 -->
  23. <mapper resource="com/test/Mapper.xml" />
  24. </mappers>
  25. </configuration>
b)Mapper.xml :sql语句配置文件;sql语句放配置文件,作用不多说,复用。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.test.Mapper">
  4. <select id="selectGood" parameterType="int" resultType="Goods">
  5. select * from test where id =#{id}
  6. </select>
  7. <insert id="insertGood" parameterType="com.test.Goods" useGeneratedKeys="true" keyProperty="id"><!-- 后面两个表示主键自动生成的 -->
  8. insert into test (cateId , name , password , price , description , orderNo , updateTime) values(#{cateId} , #{name} , #{password} , #{price} , #{description} , #{orderNo} , #{updateTime});
  9. </insert>
  10. <delete id="deleteGood" parameterType="int">
  11. delete from test where id=#{id}
  12. </delete>
  13. <update id="updateGood" parameterType="com.test.Goods">
  14. update test set name=#{name},password=#{password},description=#{description},updateTime=#{updateTime} where id=#{id}
  15. </update>
  16. </mapper>
c)Goods.java :结果集与表映射类;和hibernate不同,没有哪里写表与实体的映射关系(存疑)。
  1. package com.test;
  2. import java.util.Date;
  3. /**
  4. * 实体,作为映射时的数据,所以所有字段的名称都必须和数据库里面的一样,不管什么数据库
  5. *
  6. *对应数据库表:
  7. create table test.test (
  8. id bigint(10) primary key AUTO_INCREMENT,
  9. cateId varchar(100),
  10. name varchar(100),
  11. password varchar(100),
  12. price double,
  13. description varchar(100),
  14. orderNo int,
  15. updateTime datetime
  16. );
  17. */
  18. public class Goods {
  19. private long id;
  20. private String cateId;
  21. private String name;
  22. private String password;
  23. private double price;
  24. private String description;
  25. private int orderNo;
  26. private Date updateTime;
  27. public String getCateId() {
  28. return cateId;
  29. }
  30. public long getId() {
  31. return id;
  32. }
  33. public void setId(long id) {
  34. this.id = id;
  35. }
  36. public void setCateId(String cateId) {
  37. this.cateId = cateId;
  38. }
  39. public String getName() {
  40. return name;
  41. }
  42. public void setName(String name) {
  43. this.name = name;
  44. }
  45. public double getPrice() {
  46. return price;
  47. }
  48. public void setPrice(double price) {
  49. this.price = price;
  50. }
  51. public String getDescription() {
  52. return description;
  53. }
  54. public void setDescription(String description) {
  55. this.description = description;
  56. }
  57. public int getOrderNo() {
  58. return orderNo;
  59. }
  60. public void setOrderNo(int orderNo) {
  61. this.orderNo = orderNo;
  62. }
  63. public Date getUpdateTime() {
  64. return updateTime;
  65. }
  66. public void setUpdateTime(Date updateTime) {
  67. this.updateTime = updateTime;
  68. }
  69. public String getPassword() {
  70. return password;
  71. }
  72. public void setPassword(String password) {
  73. this.password = password;
  74. }
  75. }
d)Test1.java :dao类,测试类
  1. package com.test;
  2. import java.io.IOException;
  3. import java.io.Reader;
  4. import java.util.Date;
  5. import org.apache.ibatis.io.Resources;
  6. import org.apache.ibatis.session.SqlSession;
  7. import org.apache.ibatis.session.SqlSessionFactory;
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  9. public class Test1{
  10. public static void main(String args[]) throws IOException {
  11. String resource = "com/test/configuration.xml";//获得xml(Mybatis)数据库连接的连接
  12. Reader reader = Resources.getResourceAsReader(resource);//读取里面的文件
  13. SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
  14. .build(reader);//创建session工厂
  15. SqlSession session = sessionFactory.openSession();//打开session
  16. new Test1().insert(session);
  17. }
  18. /**
  19. * 修改
  20. * @param session
  21. */
  22. public void update(SqlSession session){
  23. int falg=0;
  24. Goods g=new Goods();
  25. g.setId(1);
  26. g.setCateId("2");
  27. g.setName("huage");
  28. g.setPassword("huage");
  29. g.setDescription("He is me");
  30. g.setUpdateTime(new Date());
  31. falg=session.update("com.test.Mapper.updateGood", g);
  32. session.commit();
  33. if(falg==1){
  34. System.out.println("Data update successfully!");
  35. }else{
  36. System.out.println("Data update fail..");
  37. }
  38. session.close();
  39. }
  40. /**
  41. * 删除
  42. * @param session
  43. */
  44. public void delete(SqlSession session){
  45. //session.delete("1");
  46. int falg=0;
  47. falg=session.delete("com.test.Mapper.deleteGood", 1);
  48. session.commit();
  49. if(falg==1){
  50. System.out.println("Data delete successfully!");
  51. }else{
  52. System.out.println("Data dalete fail..");
  53. }
  54. session.close();
  55. }
  56. /**
  57. * 插入数据
  58. * @param session
  59. */
  60. public void insert(SqlSession session){
  61. Goods g=new Goods();
  62. g.setCateId("2");
  63. g.setName("huage");
  64. g.setPassword("huage");
  65. g.setPrice(5);
  66. g.setDescription("He is me");
  67. g.setOrderNo(2);
  68. g.setUpdateTime(new Date());
  69. int flag=0;
  70. flag=session.insert("com.test.Mapper.insertGood",g);
  71. session.commit();//一定要提交才能插入数据
  72. if(flag==1){
  73. System.out.println("Data inserted successfully!");
  74. }else{
  75. System.out.println("Data inserted fails!");
  76. }
  77. session.close();
  78. }
  79. /**
  80. * 查询
  81. * @param session
  82. */
  83. public void select(SqlSession session){
  84. try {
  85. Goods goods = (Goods) session.selectOne("com.test.Mapper.selectGood", 1);//执行数据操作
  86. System.out.println("good name is : " + goods.getName());
  87. System.out.println("description :="+goods.getDescription());
  88. System.out.println("orderNo :="+goods.getOrderNo());
  89. System.out.println("price :="+goods.getPrice());
  90. System.out.println("updateTiem :="+goods.getUpdateTime());
  91. System.out.println("id :="+goods.getId());
  92. System.out.println("password :="+goods.getPassword());
  93. System.out.println("cateid :="+goods.getCateId());
  94. } catch (Exception e) {
  95. e.printStackTrace();
  96. } finally {
  97. session.close();
  98. }
  99. }
  100. }
e)Test1.java流程分析

i. 通过Reader类读取configuration.xml类容,获取数据库连接配置及相关实体类、sql语句配置信息。

ii. 依据Reader的信息创建SqlSessionFactory。(这2步在实际工程中调用一次即可)

iii. 创建SqlSession,相当于JDBC的Connection

iv. insert数据:封装了sql语句,封装了映射过程(update,remove,select过程类似)

1)封装Goods实体。

2)调用session.insert方法:2个参数,"com.test.Mapper.insertGood“,去Mapper.xml找下,insert语句已经写好了;g,实体

3)commit,close连接。

f)数据库结果

 
 

mybatis_helloword(1)的更多相关文章

随机推荐

  1. 神经网络 误差逆传播算法推导 BP算法

      误差逆传播算法是迄今最成功的神经网络学习算法,现实任务中使用神经网络时,大多使用BP算法进行训练.   给定训练集\(D={(x_1,y_1),(x_2,y_2),......(x_m,y_m)} ...

  2. Swift3中数组创建方法

    转载自:http://blog.csdn.net/bwf_erg/article/details/70858865 数组是由一组类型相同的元素构成的有序数据集合.数组中的集合元素是有 序的,而且可以重 ...

  3. LNMP架构之搭建wordpress博客网站

    系统环境版本 [root@db02 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@db02 ~]# uname -a Lin ...

  4. js 错误Error对象详解

    一.概念 error,指程序中的非正常运行状态,在其他编程语言中称为"异常"或"错误".解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信 ...

  5. winform展示Unity3D文件(支持动态改变文件路径)

    winform下展示Unity3D文件可以支持对Unity3D实现的模块进行包装,以及在其他的项目中需要展示Unity3D的界面时候,恰到适宜地进行打开展示,这里我展示如何使用winform打开Uni ...

  6. 10个优秀个android项目,精选|快速开发

    1.Android-FilePicker-android图片和文档选择器 项目地址 https://github.com/DroidNinja/Android-FilePicker 2.ViewPag ...

  7. dom4j 间隔插入节点 处理复杂的xml文档

    前几周跟着老师做了一个小项目,个人主要负责xml文档处理,处理过程还是比较复杂的.此外这篇文章并不是讲基本的dom4j读写xml文档, 所以阅读此文的前提是你已经有了dom4j或jdom等处理xml文 ...

  8. Unity3d 5.x AssetBundle打包与加载

    1.AssetBundle打包 unity 5.x版本AssetBundle打包,只需要设置好AssetBundle的名称后,unity会自动将其打包,无需处理其他,唯独需要做的是设置好个AssetB ...

  9. 微信小程序——Now you can provide attr "wx:key" for a "wx:for" to improve performance.

    在官方的swiper(滑块视图容器)中demo代码,运行时会出现Now you can provide attr "wx:key" for a "wx:for" ...

  10. CentOS7卸载自带jdk安装自己的JDK1.8

    1.查看centos自带的jdk rpm -qa | grep Java 2.删除自带的jdk 例如:rpm -e --nodeps java-1.8.0-openjdk-1.8.0.102-4.b1 ...