ibatis怎么连接mysql数据库连接池

ibatis怎么连接mysql数据库连接池,第1张

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连接数据库遇到这样的问题怎么解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9530895.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存