1.创建项目和数据库
项目名称:ibatisdemo2
数据库名:ibatis
表:author
CREATE TABLE `author` (
`id` int(11) DEFAULT NULL,
`name` varchar(30) DEFAULT NULL,
`oid` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表:book
CREATE TABLE `book` (
`oid` int(11) DEFAULT NULL,
`name` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.添加jar包
--ibaties核心jar 包
ibatis-2.3.3.720.jar
--单元测试包
junit-4.4.jar
--数据库连接驱动包
mysql-connector-java.jar
3.添加配置文件
1.在项目中创建conf目录
2.在conf目录下创建属性文件 SqlMap.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=root
3.在conf目录下添加SqlMapConfig.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!-- 加载连接数据属性文件 -->
<properties resource="SqlMap.properties"/>
<!-- 配置事务 -->
<transactionManager type="JDBC" commitRequired="false">
<!-- 配置数据源 -->
<!--
SIMPLE:
SIMPLE 是ibatis 内置的dataSource 实现,其中实现了一个简单的
数据库连接池机制,对应ibatis 实现类为
com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory 。
DBCP:
基于Apache DBCP 连接池组件实现的DataSource 封装,当无容器提
供DataSource 服务时,建议使用该选项,对应ibatis 实现类为
com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory 。
JNDI:
使用J2EE 容器提供的DataSource 实现,DataSource 将通过指定
的JNDI Name 从容器中获取。对应ibatis 实现类为
com.ibatis.sqlmap.engine.datasource.JndiDataSourceFacto
ry。
-->
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
</dataSource>
</transactionManager>
</sqlMapConfig>
4.创建实体类与映射文件
1.在src目录下创建包
包名:cn.jbit.domain
2.在包下创建实体类与映射文件
类名:Author.java
public class Author {
private Integer id;//作者编号
private String name;//作者名称
private int oid;//图书编号
//省略get 和 set
}
类名:Book.java
public class Book {
private Integer oid;//图书编号
private String name;//图书名称
private List users;//作者
//省略get 和 set
}
映射文件名:Book.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
<!-- 图书别名 -->
<typeAlias alias="Book" type="cn.jbit.domain.Book"/>
<!-- 作者别名 -->
<typeAlias alias="Author" type="cn.jbit.domain.Author"/>
<!-- 查询后封装的结果 -->
<resultMap class="Book" id="bookResult">
<result property="oid" column="oid"/>
<result property="name" column="name"/>
<result property="users" column="oid" select="getUsersByBookId"/>
</resultMap>
<!-- 查询图书信息 -->
<select id="selectAllBooks" resultMap="bookResult">
SELECT
oid,
b.name
FROM
book b
</select>
<!-- 根据图书编号查询作者 -->
<select id="getUsersByBookId" parameterClass="int" resultClass="Author">
SELECT
*
FROM
author
WHERE
author.oid=#oid#
</select>
</sqlMap>
3.在核心配置文件SqlMapConfig.xml中添加映射文件引用
<!-- 加载映射文件 -->
<sqlMap resource="cn/jbit/domain/Book.xml"/>
5.测试配置
1.在项目中创建test目录
/test
2.在test目录下创建包
包名:cn.jbit.junit
3.在包下创建测试类
类名:TestJoinSearch.java
public class TestJoinSearch {
private Reader reader;
private SqlMapClient sqlMapClient;
@Test
public void testSearch() throws SQLException{
try {
//加载配置文件
reader = Resources.getResourceAsReader("SqlMapConfig.xml");
//创建SqlMapClient对象配置对象
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
//关闭输入流
reader.close();
//selectAllBooks:配置文件中id名称
List<Book> books = sqlMapClient.queryForList("selectAllBooks");
//获取集合中的第一个元素
System.out.println(books.get(0));
} catch (IOException e) {
e.printStackTrace();
}
}
}
ibatis-一个类中包含List集合配置方式
时间: 2024-12-15 06:36:40
ibatis-一个类中包含List集合配置方式的相关文章
一个类在另一个类中以集合形式声明为属性时应该注意的问题
标题:一个类在另一个类中以集合形式声明为属性时应该注意的问题,先解释一下,看下面的代码吧 [Serializable] public class MO_T_sj_quest { public List<MO_T_sj_answer> AnswerList { get; set; } public List<MO_T_sj_answer> IDList { get; set; } public List<MO_T_sj_quest_bind> BindList { get
Java反射机制demo(五)—获得并调用一个类中的方法
这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和运行结果.获取所有的方法使用Class类中getMethos()方法. 待获取的类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package
数据抓取的一个类,包含一些常用的方法
原文:数据抓取的一个类,包含一些常用的方法 using System;using System.Configuration;using System.IO;using System.Net;using System.Text;using System.Text.RegularExpressions; namespace XXX{ /// <summary> /// Func 的摘要说明. /// </summary> public class Func
【包容】一个类可以包含另一个类的对象
当一个类中出现了另一个类的对象,这种现象我们叫做包容! #include <iostream> using namespace std; class A { public: A(){x=0;} A(int i){x=i;} void get(){cout<<x<<endl;;} ~A(){} private: int x; }; class B { public: B(){y=0;} B(int i,int j,int k):a(i),b(j){y=k;}//初始化赋值
C#判断一个类中有无";指定名称";的方法
C#中可以通过反射分析元数据来解决这个问题,示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 using System; using System.Reflection; namespace Hello { class Program {
黑马基础阶段测试题:创建Phone(手机)类,Phone类中包含以下内容:
package com.swift; public class Phone { private String pinpai; private int dianliang; public String getPinpai() { return pinpai; } public void setPinpai(String pinpai) { this.pinpai = pinpai; } public int getDianliang() { return dianliang; } public v
怎么编写可以把一个类中只能创建一个对象
static关键字可以限定一份: class Person{ String name; private Person(){};//私有化构造函数,禁止外部创建对个本类的对象 static Person p=new Person();//在本类中创建一个对象,因为下面一个普通方法在应用程序中直接类名.方法名:那么 //直接在上面添加static关键字,使之变成静态方法. public static Person getInstance(){ return p;//返回到上面的对象.具体就是把内存
struts中的action匹配一个类中多个方法
<action name="emp-*" class="employeeAction" method="{1}"> 这是利用Struts2里面的自动匹配特性.*代表通配符,可以匹配任何一个字符串[1]表示匹配的参数.举个例子来说,如果你在xml文件中做了这个配置,那么当你页面里面有一个form<form action="/emp-add" method="post"> 那么,*匹配到
关于一个类中方法的调用
大家都知道:对象是对客观事物的抽象,类是对对象的抽象,对象是类的实例. 在类中来调用方法.不过调用方法也有种种的情况.(如下几种情况) 情况一:同一个类中的两个方法相互调用 1.如果两个方法都是普通的方法,也就是非静态的方法的话,是可以直接调用的.例 ( public void a(){ system.out.println(“内容”): b(): } public void b(){ system.out.println(“内容2”): } ) 2.如果两个方法都是静态的方法,那么也是可以直接