1、Ibatis是MyBatis的前身,它是一个开源的持久层框架。它的核心是SqlMap——将实体Bean跟关系数据库进行映射,将业务代码和SQL语句的书写进行分开。
2、Ibatis是“半自动化”的ORM持久层框架。这里的“半自动化”是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言的,“全自动”ORM实现了POJO与数据库表字段之间的映射并且实现了SQL的自动生成和执行。
3、而Ibatis的着力点,则在于POJO与SQL之间的映射关系,即Ibatis并不会为程序员在运行期自动生成并执行SQL,具体的SQL语句需要程序员编写,然后通过映射配置文件将SQL语句所需的参数和返回的结果字段映射到指定POJO中。
4、StudentDaojava文件中的代码:
package comghjdaoimp;import javaioIOException;import javaioReader;import javasqlSQLException;import javautilHashMap;import javautilList;import javautilMap;import comghjdaoIStudentDao;import comghjvoStudent;import comibatiscommonresourcesResources;import comibatissqlmapclientSqlMapClient;import comibatissqlmapclientSqlMapClientBuilder;/ 学生管理数据访问层接口实现类 @author 高焕杰 /public class StudentDao implements IStudentDao {private SqlMapClient sqlMapClient;public StudentDao() {String resource = "config/sqlMapConfigxml";try {Reader reader = ResourcesgetResourceAsReader(resource);//读取配置文件sqlMapClient = SqlMapClientBuilderbuildSqlMapClient(reader);} catch (IOException e) {eprintStackTrace();}}/ 添加学生信息 @author 高焕杰 /@Overridepublic boolean add(Student student) throws SQLException{return sqlMapClientupdate("add", student) > 0;}/ 依据用户名删除学生信息 @author 高焕杰 /@Overridepublic boolean deleteByUserName(String userName) throws SQLException{return sqlMapClientdelete("deleteByUserName", userName) > 0;}/ 依据用户名更新密码 @author 高焕杰 /@Overridepublic boolean updatePasswordByUserName(String userName, String password) throws SQLException{Map<String, Object> params = new HashMap<String, Object>();paramsput("userName", userName);paramsput("password", password);return sqlMapClientupdate("updatePasswordByUserName", params) > 0;}/ 根据学生用户名查询学生信息 @author 高焕杰 /@Overridepublic Student findByUserName(String userName) throws SQLException{return (Student)sqlMapClientqueryForObject("findByUserName", userName);}/ 查询所有学生信息 @author 高焕杰 /@Override@SuppressWarnings("unchecked")public List<Student> findAll() throws SQLException{return sqlMapClientqueryForList("findAll");}}studentxml文件中的代码:
<xml version="10" encoding="UTF-8"><!DOCTYPE sqlMap PUBLIC "-//ibatisapacheorg//DTD SQL Map 20//EN" "
!-- 为Student类设置一个别名 --><typeAlias alias="student" type="comghjvoStudent"/><!-- 配置表和实体Bean之间的映射关系 --><resultMap id="studentMap" class="comghjvoStudent"><result property="id" column="id"/><result property="userName" column="user_name"/><result property="password" column="password"/><result property="state" column="state"/></resultMap><!-- 添加学生信息 --><insert id="add" parameterClass="student">insert into student values(#id#, #userName#, #password#, #state#)</insert><!-- 依据用户名删除学生信息 --><delete id="deleteByUserName" parameterClass="javalangString"> delete from student where user_name=#userName# </delete><!-- 依据用户名更新密码 --><update id="updatePasswordByUserName" parameterClass="javautilHashMap"> update student set password=#password# where user_name=#userName# </update><!-- 根据学生用户名查询学生信息 --><select id="findByUserName" parameterClass="string" resultMap="studentMap">select from student where user_name=#userName#</select><!-- 查询所有学生信息 --><select id="findAll" resultMap="studentMap">select from student</select></sqlMap>
进口javaawt。;
进口javaawtevent。;
进口javaxswing。;
进口 io ;
进口javautil。;
类学生实现javaioSerializable {
串号,姓名,专业,年级,波尔斯,性;
公共的学生(){ };
公共空间setNumber(弦号){ thisnumber =数量;}
公共字符串getNumber(){返回数量;}
公共空间setName(字符串名称){ thisname =名字;}
公共字符串getName(){返回名称;}
公共空间setSex(字符串性){ thissex =性;}
公共字符串getSex(){返回性;}
公共空间setSpecialty(字符串专业){ thisspecialty =专业;}
公共字符串getSpecialty(){返回专业;}
公共空间setGrade(字符串年级){ thisgrade =年级;}
公共字符串getGrade(){返回年级;}
公共空间setBorth(字符串波尔斯){ thisborth =波尔斯;}
公共字符串getBorth(){返回波尔斯;}
}
公开课StudentManager延伸JFrame {
JLabel磅= new JLabel(“录入请先输入记录,查询,删除请先输入学号,修改是对查询”+
“内容改后的保存!”);
静态JTextField Jnumber、Jname Jspecialty、Jgrade Jborth;
静态JRadioButton男孩,女孩;
静态ButtonGroup组=零;
静态JButton登录、选择、删除、更新显示;
静态JPanel p1,p2,p3,p4,p5,p6、pv,ph值;
静态学生学生=零;
静态Hashtable Shashtable =零;
静态文件文件=零;
静态FileInputStream剧中=零;
静态ObjectInputStream inTwo =零;
静态FileOutputStream outOne =零;
静态ObjectOutputStream outTwo =零;
公共StudentManager(){
超级(“学生基本信息管理系统”);
Jnumber = new JTextField(10);
Jname = new JTextField(10);
Jspecialty = new JTextField(10);
Jgrade = new JTextField(10);
Jborth = new JTextField(10);
组= new ButtonGroup();
男孩= new JRadioButton(“男”,真正的);
女孩= new JRadioButton(“女”,假);
groupadd(男孩);
groupadd(女孩);
登录= new JButton(“录入”);
选择= new JButton(“查询”);
删除= new JButton(“删除”);
更新= new JButton(“修改”);
显示= new JButton(“显示”);
登录。 addActionListener(新InputAct());
选择。 addActionListener(新InquestAct());
更新。 addActionListener(新ModifyAct());
删除。 addActionListener(新DeleteAct());
秀。 addActionListener(新ShowAct());
updatesetEnabled(假);
p1 = new JPanel();
p1。 (新JLabel添加(“学号:“,JLabelCENTER));
p1add(Jnumber);
p2 = new JPanel();
p2。 (新JLabel添加(“姓名:“,JLabelCENTER));
p2add(Jname);
p3 = new JPanel();
p3。 (新JLabel添加(“性别:“,JLabelCENTER));
p3add(男孩);
p3add(女孩);
p4 = new JPanel();
p4。 (新JLabel添加(“专业:“,JLabelCENTER));
p4add(Jspecialty);
p5 = new JPanel();
p5。 (新JLabel添加(“年级:“,JLabelCENTER));
p5add(Jgrade);
p6 = new JPanel();
p6。 (新JLabel添加(“出生:“,JLabelCENTER));
p6add(Jborth);
pv = new JPanel();
pv。 setLayout(新GridLayout(6,1));
pvadd(p1);
pvadd(p2);
pvadd(p3);
pvadd(p4);
pvadd(p5);
pvadd(p6);
ph = new JPanel();
phadd(登录);
phadd(选择);
phadd(更新);
phadd(删除);
phadd(显示);
=新文件(“学生信息 txt”);
Shashtable = new散列表();
如果(! fileexists()){
尝试{
FileOutputStream =新FileOutputStream(文件);
ObjectOutputStream objectOut = new ObjectOutputStream(出);
objectOutwriteObject(Shashtable);
objectOutclose();
outclose();
}
抓住(IOException e){ }
}
容器con = getContentPane();
consetLayout(新BorderLayout());
conadd(磅,BorderLayoutNORTH);
BorderLayoutCENTER conadd(pv);
conadd(ph值、BorderLayoutSOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(100100600300);
setVisible(真正的);
}
公共静态void main(String[]args){新StudentManager();}
类InputAct实现ActionListener {
公共空间actionPerformed(ActionEvent e){
updatesetEnabled(假);
字符串数量= " ";
数量= JnumbergetText();
如果(numberlength()> 0){
尝试{
剧中= new FileInputStream(文件);
inTwo = new ObjectInputStream(剧中);
Shashtable =(Hashtable)inTworeadObject();
inOneclose();
inTwoclose();
}
捕获异常(ee){ Systemoutprintln(“创建散列表出现问题!”);}
如果(ShashtablecontainsKey(数字)){
字符串警告= "该生信息已存在,请到修改页面修改!”;
JOptionPaneshowMessageDialog(null,警告,“警告”,
JOptionPaneWARNING_MESSAGE);
} / / i
其他{
字符串m =“该生信息将被录入!”;
int ok = JOptionPaneshowConfirmDialog(null,m,“确认”,
JOptionPaneYES_NO_OPTION JOptionPaneINFORMATION_MESSAGE);
如果(好吧= = JOptionPaneYES_OPTION){
字符串名称= JnamegetText();
字符串专业= JspecialtygetText();
串级= JgradegetText();
字符串波尔斯= JborthgetText();
字符串性=零;
如果(boyisSelected()){性= boygetText();}
其他{性= girlgetText();}
学生= new();
studentsetNumber(数量);
studentsetName(名称);
studentsetSpecialty(专业);
studentsetGrade(年级);
studentsetBorth(波尔斯);
studentsetSex(性);
尝试{
outOne = new FileOutputStream(文件);
outTwo = new ObjectOutputStream(outOne);
Shashtableput(数量、学生);
outTwowriteObject(Shashtable);
outTwoclose();
outOneclose();
}
捕获异常(ee){ Systemoutprintln(“输出散列表出现问题!”);}
JnumbersetText(空);
JnamesetText(空);
JspecialtysetText(空);
JgradesetText(空);
JborthsetText(空);
}
} / / else1结束
} / / i₀f
其他{
字符串警告= "必须输入学号!”;
JOptionPaneshowMessageDialog(null,警告,
“警告”,JOptionPaneWARNING_MESSAGE);
} / / else0结束
} / / actionPerformed结束
} / /结束类
类InquestAct实现ActionListener {
公共空间actionPerformed(ActionEvent e){
字符串数量= " ";
数量= JnumbergetText();
如果(numberlength()> 0){
尝试{
剧中= new FileInputStream(文件);
inTwo = new ObjectInputStream(剧中);
Shashtable =(Hashtable)inTworeadObject();
inOneclose();
inTwoclose();
}
捕获异常(ee){ Systemoutprintln(“散列表有问题!”);}
如果(ShashtablecontainsKey(数字)){
updatesetEnabled(真正的);
学生stu =(学生)Shashtableget(数量);
JnamesetText(stugetName());
JspecialtysetText(stugetSpecialty());
JgradesetText(stugetGrade());
JborthsetText(stugetBorth());
如果(stugetSex()equals(男)){ boysetSelected(真正);}
其他{ girlsetSelected(真正);}
}
其他{
updatesetEnabled(假);
字符串警告= "该学号不存在!”;
JOptionPaneshowMessageDialog(null,警告,
“警告”,JOptionPaneWARNING_MESSAGE);
}
}
其他{
updatesetEnabled(假);
字符串警告= "必须输入学号!”;
JOptionPaneshowMessageDialog(null,警告,
“警告”,JOptionPaneWARNING_MESSAGE);
}
}
}
类ModifyAct实现ActionListener {
公共空间actionPerformed(ActionEvent e){
字符串数量= JnumbergetText();
字符串名称= JnamegetText();
字符串专业= JspecialtygetText();
串级= JgradegetText();
字符串波尔斯= JborthgetText();
字符串性=零;
如果(boyisSelected()){性= boygetText();}
其他{性= girlgetText();}
学生学生=新学生();
学生setNumber(数量);
学生setName(名称);
学生setSpecialty(专业);
学生setGrade(年级);
学生setBorth(波尔斯);
学生setSex(性);
尝试{
outOne = new FileOutputStream(文件);
outTwo = new ObjectOutputStream(outOne);
Shashtable。 把(数量、学生);
outTwowriteObject(Shashtable);
outTwoclose();
outOneclose();
JnumbersetText(空);
JnamesetText(空);
JspecialtysetText(空);
JgradesetText(空);
JborthsetText(空);
}
捕获异常(ee){
Systemoutprintln(“录入修改出现异常!”);
updatesetEnabled(假);
}
}
}
类DeleteAct实现ActionListener {
公共空间actionPerformed(ActionEvent e){
updatesetEnabled(假);
字符串数量= JnumbergetText();
如果(numberlength()> 0){
尝试{
剧中= new FileInputStream(文件);
inTwo = new ObjectInputStream(剧中);
Shashtable =(Hashtable)inTworeadObject();
inOneclose();
inTwoclose();
}
捕获异常(ee){ }
如果(ShashtablecontainsKey(数字)){
学生stu =(学生)Shashtableget(数量);
JnamesetText(stugetName());
JspecialtysetText(stugetSpecialty());
JgradesetText(stugetGrade());
JborthsetText(stugetBorth());
如果(stugetSex()equals(男)){ boysetSelected(真正);}
其他{ girlsetSelected(真正);}
}
字符串m = "确定要删除该学生的记录吗”;
int ok = JOptionPaneshowConfirmDialog(null,m,“确认”,
JOptionPaneYES_NO_OPTION JOptionPaneQUESTION_MESSAGE);
如果(好吧= = JOptionPaneYES_OPTION){
Shashtableremove(数量);
尝试{
outOne = new FileOutputStream(文件);
outTwo = new ObjectOutputStream(outOne);
outTwowriteObject(Shashtable);
outTwoclose();
outOneclose();
JnumbersetText(空);
JnamesetText(空);
JspecialtysetText(空);
JgradesetText(空);
JborthsetText(空);
}
捕获异常(ee){ Systemoutprintln(ee);}
}
else if(好吧= = JOptionPaneNO_OPTION){
JnumbersetText(空);
JnamesetText(空);
JspecialtysetText(空);
JgradesetText(空);
JborthsetText(空);
}
其他{
字符串警告= "该学号不存在!”;
JOptionPaneshowMessageDialog(null,警告,
“警告”,JOptionPaneWARNING_MESSAGE);
}
}
其他{
字符串警告= "必须输入学号!”;
JOptionPaneshowMessageDialog(null,警告,
“警告”,JOptionPaneWARNING_MESSAGE);
}
}
}
类ShowAct实现ActionListener {
公共空间actionPerformed(ActionEvent e){
新StudentShow(文件);
}
}
类StudentShow JDialog {延伸
Hashtable学生散列表=零;
JTextArea显示=零;
FileInputStream剧中=零;
ObjectInputStream inTwo =零;
文件文件=零;
公共StudentShow(文件文件){
超级(新JFrame(),“显示对话框”);
thisfile =文件;
显示= new JTextArea(30);
尝试{
剧中= new FileInputStream(文件);
inTwo = new ObjectInputStream(剧中);
学生散列表=(Hashtable)inTworeadObject();
inOneclose();
inTwoclose();
}
捕获异常(ee){ }
如果学生散列表isEmpty())显示append(“目前还没有学生的信息记录! \ n”);
其他{
显示。 setText(“学号姓名性别专业年级出生\ n”);
(列举运用=学生散列表 elements();enmhasMoreElements();){
学生stu =(学生)enmnextElement();
字符串性= " ";
如果(stugetSex()equals(男))性= "男";
其他性= "女";
字符串str = stugetNumber()+”、“+ stugetName()+”、“+性别+”、“
+ stugetSpecialty()+”、“+ stugetGrade()+”、“+ stugetBorth()+“\ n”;
显示append(str);
}
}
JScrollPane滚动= new JScrollPane(显示);
容器con = getContentPane();
conadd(“中心”,滚动);
convalidate();
setVisible(真正的);
setBounds(200200400300);
addWindowListener(新WindowAdapter(){
公共空间windowClosing(WindowEvent e){ setVisible(假);}
}
);
}
}
}
Element type "SqlMap" must be declared
SqlMapConfigxml中未配置sql映射文件<sqlMap resource="xml"/>
其中 配置文件如下
<!---这段不需要,注释掉--->
<!--
<resultMap class="javautilHashMap" id="rMap">
<result property="username" column="username"/>
<result property="password" column="password"/>
</resultMap>
-->
<!--这里传入一个map,返回一个map-->
<select id="getUserByNameAndPass" parameterClass="map" resultClass="map">
<!--
#username# ---向map获取键值为username的值
#password# -- 同上
resultClass="map" ——代表返回前台的数据封转为map格式,键值对应和你sql的列名对应,
但是要注意返回后台的是不是键值都是大写了。不同数据库返回的键可能有些都是大写的例如oracle,sqlserver 是sql中的列名
-->
<![CDATA[
select username,password from user where username=#username# and password=#password#
]]>
</select>
public Map getUserByNameAndPass(String username,String password){
//用map封转多个参数
Map params = new HashMap();
paramsput("username",username);
paramsput("password",password);
//如果定义命名空间的需要加前缀,第一个是你xml配置sql的id,第二个是map参数
Map map=sqlmapqueryForMap("getUserByNameAndPass", params);
Systemerr,println(mapget("password"));//获得password
//Systemerr,println(mapget("PASSWORD"));//有些数据库返回的是大写,例如oracle
Systemerrprintln(mapget("username"));//获得username
//Systemerr,println(mapget("USERNAME"));//有些数据库返回的是大写,例如oracle
return map;
}
dynamic 表示这个里面是属性是动态的,就是根据你的查询参数来判断是否有的;
prepend:是指加在后面的;
isNotNull:表示传入的参数值不为null,比如你的传入name不能为null,如果为null则set里面就没有name=#name#这个;
property:是你的parameterClass里面的属性;
如isNotNull第一个不符合的时候sql语句不是有错误吗,变成UPDATE T_USER set ,password=#password#了;第一个符合的话,也会变成多一个逗号
这个问题我也遇到了。通过换过数据库排除了ibatis问题。最后在数据库中改个配置后问题解决。
vi /etc/mycnf
[mysqld]
character-set-server=utf8
你写了resultClass,所以返回结果就是Book这个类,你应该有配一个alias。这样写要求你的book类的每一个字段和数据库的字段拼写都一样(首字母小写)。要是要对应的话,要写关联查询的配置,你可以看下api文档,配置较为繁琐。类似这样:
<resultMap type="HrMenu" id="menuResultMap">
<id property="id" column="ID" />
<result property="name" column="name" />
<result property="url" column="url" />
<result property="parentid" column="parentid" />
<result property="level" column="level" />
<result property="seq" column="seq" />
<result property="butnstyle" column="butnstyle" />
<association property="parent" column="parentid" select="HrMenufindMenuById"></association>
<collection property="child" column="id" select="HrMenufindMenusByParentId"></collection>
</resultMap>
<!-- 查询菜单list -->
<select id="findMenuById" parameterType="int" resultMap="menuNavResultMap">
SELECT FROM hr_menu where id=#{id} order by seq;
</select>
<!-- 查询菜单list -->
<select id="findMenusByParentId" parameterType="int" resultMap="menuResultMap">
SELECT FROM hr_menu where parentid=#{id} order by seq asc;
</select>
以上就是关于ibatis怎么连接mysql数据库连接池全部的内容,包括:ibatis怎么连接mysql数据库连接池、java个人信息查询和修改、用ibatis连接数据库遇到这样的问题怎么解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)